七、java集合

 集合体系结构

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。

Java第七章集合 随笔 第1张

 

collection

  方法:

 

Collection coll = new ArrayList(); 1.size():返回集合中元素的个数 2.add(Object obj):向集合中添加一个元素 3.addAll(Collection coll):将形参coll中包含的所有元素添加到当前集合中 4.isEmpty():判断集合是否为空 5.clear():清空集合元素 6.sysout(coll):查看几何中的元素 7.Collection coll1 = Arrays.asList(1,2,3):声明是直接加进元素 8.contains(Object obj):判断几何中是否包含指定的obj元素。如果包含,返回true,反之,返回false 判断的依据,根据元素所在的类的equals()方法进行判断 明确:如果存入集合中的元素是自定义类的对象。要求:自定义类要重写equals()方法 9.containsAll(Collection coll):判断当前集合中是否包含coll中的所有元素 10.retainAll(Collection coll1):求当前集合与coll的共有的元素,返回给当前集合 11.remove(Object obj):删除集合中的obj元素。若删除成功,返回true,否则返回false 12.removeAll(coll1):从当前集合中删除包含在coll中的元素 13.equals(Object obj):比较两个集合中的所有元素是否相同 14.hashCode():集合的hash值,堆空间放在那里 15.toArray():将集合转化为数组 16.iterator():返回一个Iterator接口实现类的对象,进而实现集合的遍历。 Iterator iterator = coll.iterator(); whille(iterator.hasNext()) sysout(iterator.next());//输出一个

 

 

 

 

collection子类:

------->List

ArrayList:List的主要实现方法 List中相对于Collection,新增加的方法 1.void add(int index,Object obj):在指定的索引位置index添加元素ele 2.boolean addAll(int index,Collection eles) 3.Object get(int index):获取指定索引的元素 4.Object remove(int index):删除指定索引位置的元素 5.Object set(int index,Object ele):设置指定索引位置的元素ele 6.List subList(int fromIndex,int toIndex):返回从formIndex到toIndex结束的一个子list集合(左闭右开:包括左边不含右边) 7.int indexOf(Object obj)返回obj在集合中首次出现的位置,没有返回-1 8.int lastIndexOf(Object obj)返回obj在集合中最后一次出现的位置,没有返回-1 List常用的方法: 增(add(Object obj)) 删(remove) 改(set(int index,Object ele)) 查get(int index) 插(add(int index,Object obj)) 长度(size())

 

 

--------->Set子类:

--------------------->HashSet:

 

Set:存储的元素是无序的,不可重复的 1.无序性:无序性!=随机性。真正的无序性,指的是元素在底层储存的位置是无序的。 2.不可重复性:当向Set中添加进相同的元素的时候,后面的这个不能添加进去。 说明:要求添加进Set中的元素所在的类,一定要重写equals()和hashCode()方法。 进而保证Set中元素的不可重复性。 Set中的元素如何存储的呐?使用啦哈希算法。 当向Set中添加对象时,首先调用此对象所在类的hashCode()方法,计算此对象的哈希值,
此哈希值决定了此对象在Set中存储位置。若此位置之前没有对象储存,则这个对象直接存
储到此位置。位置已有对象存储,再通过equals()比较这两个对象是否相同,如果相同,
后一个对象就不能再添加进来,万一返回false呐,都存储。(不建议如此) >要求:hashCode()方法要与equals()方法一致

 

 

 

 

---------------------->LinkedHashSet:

 

LinkHashSet:使用链表维护一个添加进集合中的顺序,导致当我们遍历LinkedHashSet集合 元素时,是按照添加进去的顺序遍历的 LinkedHashSet插入性能略低于HashSet,但在迭代访问Set里的全部元素时有很好的性能

 Java第七章集合 随笔 第2张

 

 

 

----------------------->TreeSet

           自然排序---------自然排序接口Comparable

 

TreeSet: 1.向TreeSet中添加的元素必须是同一个类的 2.可以按照添加进集合中的元素的指定顺序遍历。像String,包装类等默认按照从小到大的顺序遍历。 3.当向TreeSet中添加自定义类的对象时,有两种排序方法:①自然排序②定制排序 4.自然顺序:要求自定义类实现java.lang.Comparable接口并重写其compareTo(Object obj)的抽象方法 在此方法中,指明按照自定义类的哪个属性进行排序 5.向TreeSet中添加元素时,首先按照compareTo()进行比较,一旦返回0,虽然仅是两个对象此属性值相同。 但是程序会认为这两个对象是相同的,进而后一个对象是不能添加进来的 >compareTo()与hashCode()以及equals()三者保持一致 public int compareTo(Object obj){ if(o instanceof Person){ Person p = (Person)o; int i = this.age.compareTo(p.age); if(i == 0){ return this.name.compareTo(p.name); }else{ return i; } } return 0; }
1.要求添加TressSet中的元素所在的类implements Comparable接口
2.重写compareTo(object obj),在此方法内指明按照元素的哪个属性进行排序
3.向TreeSet中添加元素即可,若不实现此接口,会报运行时异常

 

            定制排序----------定制排序接口Comparator

定制排序:>compare()与hashCode()以及equals()三者保持一致 1.创建一个实现了Comarator接口的类对象 Comparator com = new Comparator(){ 向TreeSet中添加Customer类的对象,在此compare()方法中,指明是按照Customer的哪个属性排序的 public int compare(Object o1,Object o2){ if(o1 isntanceof Customer && o2 isntanceof Customer){ Customer c1 = (Customer)o1; Customer c2 = (Customer)o2; int i = c1.getId().compareTo(c2.getId()) ; if(i==0){ return c1.getName().compareTo(c2.getName()); } return i; } return 0 } }; 2.将此对象作为形参传递给TreeSet的构造器中 TreeSet set = new TreeSet(com); 3.向TreeSet中添加Comparator接口中的compare方法中涉及的类的对象 set.add(new Customer("AA",1003)); set.add(new Customer("BB",1002));


1.创建一个实现Comparator接口的实现类的对象,在实现类中重写Comparator的compare(Object o1,Object o2)方法
2.在此compare()方法中指明按照元素所在类的哪个属性进行排序
3.将此实现Comparator接口的实现类的对象作为形参传递给TreeSet的构造器中
4.向TreeSet中添加元素即可。若不实现此接口,会报与运行时异常

 

 遍历集合

 

遍历集合: 1.使用迭代器iterator实现集合的遍历 Iterator iterator = coll.iterator(); whille(iterator.hasNext()) sysout(iterator.next());//输出一个 2.使用增强for循环实现集合的遍历 for(Object i : coll){ sysout(i); }

 

 

 

 Map

Map接口 1.Map与Collection并列存在。用于保存具有映射关系的数据:Key-Value 2.Map中的key和value都可以时任何引用类型的数据 3.Map中的key用Set来存放,不允许重复,即同一个Map对象所对应的类,须重写hashCode()和equals()方法 4.常用String类作为Map的"键"。 5.key与value之间存在单向一对一关系,即通过指定的key总能找到唯一的、确定的value

 

 

Map接口体系的继承树

Java第七章集合 随笔 第3张

 

  遍历Key-Value

 

遍历key-value对 方式一: Set set1 = map.keySet(); for(Object obj : set1){ sysout(obj + "--->" + map.get(obj)); } 方式二: Set set2 = map.entrySet(); for(Object obj : set2){ Map.Entry entry = (Map.Entry)obj; sysout(entry);/ sysout(entry.getKey() + "--->" + entry.getValue()) }


key是不可重复的,使用Set存放,value可以重复的,使用Collection来存放的,
一个key-value对构成一个entry(Map.Entry),entry使用Set来存放

 

 

 

 

Map分类

  HashMap:

 

一.HashMap:key是用Set来存放的,不可重复。value是用Collection来存放的,可重复 一个key-value对,是一个Entry。所有的Entry是用Set存放的,也是不可重复的。 二.向HashMap中添加元素时,会调用key所在类的equals()方法,判断两个key是否相同,若相同,则只能添加进去后添加的那个元素 1.Object put(Object key,Object value):向Map中添加一个元素,可以存null。 2.int size():返回集合的长度 3.Object remove(Object obj):按照指定的key删除此key-value 4.void putAll(Map t):放入一个Map集合 5.void clear():清空 6.Object get(Object key):获取指定key的value值,若无此key 7.boolean containKey(Object key):是否有这个key 8.boolean containsValue(Object value)是否有这个值 9.boolean isEmpty()是否为空 10.boolean equals(Object obj)是否跟另一个Map集合相同

key 不重复 比较 :重写equals()和hashCode()方法
value 可重复 比较:重写equals()方法

 

 

 

 

  LinkedHashMap

 

LinkedHashMap:使用链表维护添加进Map中的顺序,故遍历Map时,是按添加的顺序遍历的

 

 

 

 

  TreeMap

 

按照添加进Map中的元素的key的指定属性进行排序。要求:key必须是同一个类的对象

自然排序vs自制排序

 

 

 

 

  Hashtable

 

古老的实现类,线程安全,不建议使用 Properties 常用来处理属性文件,键和值都是String类型的

 

 

 

 

Collections工具类

 

reverse(List)反转List中元素的顺序 shuffle(List):对List集合元素进行随机排序 sort(List):根据元素的自然顺序对指定List集合元素按升序排序 sort(List,Comparator):根据指定的Comparator产生的顺序对List集合元素进行排序 swap(List,int ,int):将指定list集合中的i处元素进行交换 Object max(Collection):根据元素的自然顺序,返回给定集合中的最大元素 Object max(Collection,Comparator):根据Comparator指定的顺序,返回给定集合中的最大元素 Object min(Collection)根据元素的自然顺序,返回给定集合中的最小元素 Object min(Collection,Comparator):根据Comparator指定的顺序,返回给定集合中的最小元素 int frequency(Collection,Object):返回指定集合中指定元素的出现次数 void copy(List dest,List src):将src中的内容复制到dest中 boolean replaceAll(List list,Object oldVal,Object newVal):使用新值替换List的旧值对象 List list1 = Arrays.asList(new Object[list.size()]); Collections.copy(list1,list); sysout(list); 通过如下的方法保证list线程的安全性 List list2 = Collections.synchronizedList(list);

 

 

 

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄