java集合总结

1.java集合可以分为Collection和Map两大接口

①Collection接口:有两个子接口,Set:元素无序,不可重复的集合;List:元素有序,可重复的集合(动态数组 )

②Map接口 :具有映射关系“key-value对”的集合。

 

 

2.子接口List:ArrayList(主要的实现类)、LinkedList(频繁的增、删操作推荐使用)、Vector(古老的实现类、线程安全的)

ArrayList常见方法:

 

* 1.add():向集合中添加一个元素
* 2.addAll():将指定集合添加到该集合的末尾
* 3.size():返回该集合中元素的个数
* 4.isEmpty():判断该集合是否为空,返回true或false
* 5.clear():清空当前集合
* 6.contains():判断该集合当中是否有指定的元素,返回true或false,注意:判断自定义类时需要从写自定义类的equals方法
* 7.containsAll():判断该集合是否含有指定集合中的所有元素
* 8.retainAll():删除与指定元素不同的元素
* 9.remove():删除指定元素,返回true或false
* 10.removeAll():从此集合中删除指定集合中包含的所有元素。
* 11.equals():判断两集合中的元素是否完全相同
* 12.hashCode():将集合中所有元素的哈希值叠加起来
* 13.toArray():将集合转化成数组类型
* 14.iterator():返回一个Iterator接口(迭代器)实现类的对象,进而实现集合的遍历

集合常用遍历方法:for()循环、iterator迭代器、forEach()增强循环

3.子接口Set:Set中常用的方法都是在Collection下定义的

 

* Set:存储的元素是无序的,不可重复,注意:无序性不等于随机性
* 无序性:指在元素在底层存储的位置是无序的
* 不可重复性:当添加相同的元素时,后面的不能添加进去,在自定义类中需要重写equals和hashCode方法
* Set中的元素存储:使用了哈希算法,当向Set中添加对象时,首先调用此对象所在类的hashCode方法,计算此对象的哈希值
* ,此哈希值决定了该对象在Set中的存储位置。若此位置之前没有对象存储,则添加成功。若此位置已有对象存储,则通过equals
* 方法来判断两对象是否相同,如果相同,则后面添加的则不能添加成功

 

HashSet(主要实现类)

LinkedHashSet:使用链表来维护了添加元素进集合的顺序,在遍历集合时,是按照添加顺序来遍历的,性能略低于hashSet,但在适用于迭代访问集合所有元素

TreeSet:

 

* 向TreeSet中添加元素必须是同一类型的!
* 在向TreeSet中添加自定义类的对象时,需要添加Comparable接口
* ,否则报错:java.lang.ClassCastException: collection.com.Student cannot be cast to java.lang.Comparable
* 当向TreeSet中添加自定义类的对象时,有两种排序方法:①自然排序 ②定制排序
* ①定制排序:要求自定义类中实现java.lang.Comparable接口并重写compareTo(Object o)方法,在此方法中可以选择自定义的任意属性来排序
* 当插入相同排序属性的对象时,后面插入的不会显示,比如new Student("AA",18),new Student("AA",20),后面的不会插入TreeSet中
* 这与compareTo方法有关,两对象进行比较,一旦返回0,虽然只是两个对象的排序属性相同,但程序会认为这两个对象时相同的,所以后面添加的不能进来
* 所以需要在compareTo方法中添加多级排序来保证compareTo() hashCode() equals()三者一致

 4.Map:HashMap(Map常用的实现类)、LinkedHashMap(与LinkedHashSet类似)、TreeMap、Hashtable(古老的、线程安全的,基本不用)

HashMap:

*HashMap常用方法:
* 1.put(key,value):向HashMap中添加元素
* 2.putAll(map t):与Collection中的addAll类似
* 3.remove(key):按指定的key来删除这个key-value
* 4.clear():清空HashMap
* 5.get(key):获取指定的key的value值
* 6.size():返回集合长度
* 7.containsKey(key):判断是否包含有有指定的key,返回true或false
* 8.containsValue(value):判断是否含有指定的value
* 9.isEmpty():判断集合是否为空

 

* 当向HashMap中添加元素时,key是用Set来存放的,所以不可重复,value是用Collection存放的,可重复
* 一个key-value是一个Entry(条目),Entry是用Set来存放的,也是不可重复分的。
* 注意:与Set不同的是,当向其中添加相同key的元素时,后面添加的元素会覆盖前面的元素,与Set恰好相反。

 

* HsahMap遍历方法
* 1.Set set = map.keySet(); 遍历key集
* 2.Collection coll = map.values(); 遍历value集,顺序与上面一致
* 3.Set set = map.entrySet(); 遍历key-value集

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

 Hashtable下的Properties:常用来处理属性文件,key与value都是String类型

 

5.Collections:Collection与Map的工具类

* 常用方法:
* 1.reverse(list):反转List中的元素的顺序
* 2.shuffle(list):对List中的元素随机排序
* 3.sort(list):对List中的元素进行升序排序
* 4.sort(list,Comparator):根据Comparator指定的属性来对List集合进行排序
* 5.swap(list,i,j):交换List中的第i和第j位元素
* 6.max(Collection):返回集合中的最大数
* 7.max(Colleciton,Comparator):由Comparator来指定属性
* 8.min(Collection):返回集合中的最小数
* 9.min(Collection,Comparator)
* 10.copy(list1,list):将后面的集合复制给前面,注意要保证前面集合的长度不小于后面的
* 11.frequency(Collections,Object):返回指定集合中指定元素的出现次数
* 12.replaceAll(list,old,new):使用新值来替换指定集合中的所有旧值

* Collections类提供了多个synchronizedXxx的方法,来将指定的集合包装成线程同步的集合
* 从而解决多线程并发访问集合时的线程安全问题

 

posted @ 2018-11-22 17:05  水星丶  阅读(128)  评论(0编辑  收藏  举报