Java集合
一、 集合
1、 Collection接口(1)List接口:存储有序的,可以重复的元素
1)ArrayList(List的主要实现类)
2)LinkedList(针对于频繁的插入和删除操作)
3)Vector(线程安全的但效率低于ArrayList)
(2)Set接口:存储无序的、不可重复的元素
1)HashSet(主要实现类)
2)LinkedHashSet(使用链表维护添加进Set中的顺序,故遍历时,是按添加的顺序遍历的)
3)TreeSet
2、 Map接口:存储“key-value”的数据
(1)HashMap(主要实现类)
(2)LinkedHashMap(使用链表维护添加进Map中的顺序,故遍历时,是按添加的顺序遍历的)
(3)TreeMap(按照添加进Map中的元素key的指定属性进行排序,key必须是同一个类型的)
(4)Hashtable(线程安全,古老的Map实现类)
1)Properties(Hashtable的子类,常用来处理属性文件,键和值都是String类的)
3、 对象排序接口:Comparable,Comparator
4、 迭代器:Iterator,ListIterator
5、 容器工具类:Collections
二、 Collection的常用方法
(1)size():返回集合中元素的个数
(2)add(Object obj):向集合中添加一个元素
(3)addAll(Collection coll):将形参coll中包含的所有元素添加到当前集合中
(4)isEmpty():判断集合是否为空
(5)clear():清空集合
(6)contains(Object obj):判断集合中是否包含指定的obj元素。如果包含,返回true。
(7)containsAll(Collection coll):判断当前集合中是否包含coll的所以元素
(8)retainAll(Collection coll):求当前集合与coll的共有元素,返回给当前集合
(9)remove(Object obj):删除集合中的obj元素。若删除成功,返回true。
(10)removeAll(Collection coll):从当前集合中删除包含在coll中的元素
(11)equals(Object obj):判断两个集合中的所有元素是否完全相同
(12)hashCode():
(13)toArray():将集合转化成数组
(14)iterator():返回一个Iterator接口实现类的对象,进而实现集合的遍历
三、List接口(继承Collection接口)
1、 List中相对于Collection新增加的方法
(1) void add(int index,Object ele):在指定的索引位置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)int indexOf(Object obj):返回obj在集合中首次出现的位置,没有的话,返回-1
(7)int lastIndexOf(Object obj):返回obj在集合中最后一次出现的位置,没有的话,返回-1
(8)List subList(int formIndex,int toIndex):返回从fromIndex到toIndex结束左闭右开的一个子List
2、 List常用的方法: 增(add(Object obj)) 删(remove) 改(set(int index,Object obj))
查(get(int index)) 插(add(int index,Object ele)) 长度(size())
3、List的遍历方式
(1)方式一:迭代器
Iterator iterator=list.iterator(); while(iterator.hasNext()){ System.out.println(iterator.next()); } System.out.println();
(2)方式二:增强for循环
for(Object o:list) { System.out.println(o); } System.out.println();
(3)方式三:一般for循环
for(int i=0;i<list.size();i++){ System.out.println(list.get(i)); }
四、Set接口(继承Collection接口)
1、Set存储的元素是无序的,不可重复的
(1)无序性:无序性不等于随机性,无序性指的是元素在底层存储的位置是无序的。
(2)不可重复性:当向Set中添加相同的元素时,后面的这个不能添加进去。
说明:要求添加进Set中的元素所在的类,一定要重写equals(),hashCode()方法。
2、Set中的元素的存储方式:哈希算法
当向Set中添加对象时,首先调用所在类的hashCode()方法,计算此对象的哈希值,
此哈希值决定了此对象在Set中的存储位置,若此位置之前没有对象存储,则这个对象直接存储到此位置,
若此位置之前已有对象存储,再通过equals()比较这两个对象是否相同,如果相同,后一个就不能再添加进来。
要求 :hashCode()方法要和equals()方法一致。
3、LinkedHashSet:使用链表维护了一个添加进集合的顺序,导致当我们遍历LinkedHashSet集合元素时,是按添加进去的顺序遍历的。
LinkedHashSet插入性能略低于HashSet,但迭代访问Set里的全部元素时有很好的性能。
4、TreeSet:
(1)向TreeSet中添加的元素必须是同一个类型的。
(2)可以按照添加进集合的指定顺序遍历。像String,包装类等默认按照从小到大的顺序遍历。
(3)当向TreeSet中添加自定义的对象时,有两种排序方法:自然排序,定制排序。
a.自然排序:要求自定义类实现java.lang.Comparable接口并重写其compareTo(Object obj)方法,在此方法中指明按照自定义类的哪个属性进行比较。
向TreeSet中添加元素的时候,首先按照compareTo()进行比较,一旦返回0,虽然仅是两个对象的该属性值相同,
但是程序会认为这两个对象是相同的,进而后一个对象就不能添加进来。
要求:compareTo()、hashCode()、equals()方法一致。
b.定制排序:创建一个实现了Comparator接口的类对象,将此对象作为形参传递给TreeSet的构造器中,
向TreeSet中添加Comparator接口的compare()方法涉及的对象。
五、Map接口
Map接口:存储“key-value”的数据,key是不可重复的(可以视为一个Set集合),value是可以重复的(可以视为一个Collection),
一对key-value视为一个Entry。
1、
(1)Object put(Object key,Object value):向Map中添加一个元素。
注意:向HashMap中添加元素时会调用key所在类的equals()方法,判断两个key是否相同,如果相同,则只能添加进后添加的那个元素。
(2)Object remove(Object key):按照指定的Key删除此Entry。
(3)void putAll(Map t):将指定map添加进当前map中
(4)void clear():清空
(5)Object get(Object key):获取指定key的value值。若无此key,则返回null。
(6)boolean containsKey(Object key)
(7)boolean containsValue(Object value)
(8)int size()
(9)boolean equals(Object o)
2、遍历Map
(1)遍历key集 Set set=map.keySet(); 再用遍历set的三种方法来遍历key。 如:for(Object obj:set){ System.out.println(obj); }
(2)遍历value集Collection values=map.values(); 再用for循环或者迭代器遍历 如:Iterator i=values.iterator(); while(i.hasNext()){ System.out.println(i.next()); }
(3)如何遍历Entry(key-value对)方式一: Set set1=map.keySet(); for(Object obj:set){ System.out.println(obj+"--------->"+map.get(obj)); }
方式二:Set set2=map.entrySet(); for(Object obj:set2){ Map.Entry entry=(Map.Entry)obj; //System.out.println(entry.getKey+"---->"+entry.getValue); System.out.println(entry); }
3、HashMap:允许null键和null值,不保证映射顺序。
HashMap判断两个key相等的标准:两个key通过equals()方法返回true,hashCode值也相等(与HashSet判断重复一样)。
HashMap判断两个value相等的标准:两个value通过equals()方法返回true。
4、TreeMap:按照添加进Map中的元素key的指定属性进行排序,key必须是同一个类型的。
有两种排序方法:自然排序,定制排序,对key的排序其实就是TreeSet排序。
5、Hashtable:古老的Map实现类,线程安全的,与HashMap不同的是Hashtable不允许使用null作为key和value。
五、操作集合的工具类:Collections
1、常用方法
(1)reverse(List list):反转List中的元素。
(2)shuffle(List list):对于List集合元素进行随机排序。
(3)sort(List list):根据元素的自然排序对指定List集合元素进行排序。
(4)sort(List list,Comparator com):根据指定的Comparator产生的顺序对List集合元素进行排序。
(5)swap(List list,int i,int j):将指定List集合中的下标为i处的元素和下标为j处的元素进行交换。
(6)Object max(Collection):根据元素的自然顺序,返回给定集合中的最大元素。
(7)Object max(Collection,Comparator):根据Comparator指定的顺序,返回给最大元素。
(8)Object min(Collection):根据元素的自然顺序,返回给定集合中的最小元素。
(9)Object min(Collection,Comparator):根据Comparator指定的顺序,返回给最小元素。
(10)int frequency(Collection,Object):返回指定集合中指定元素的出现次数。
(11)void copy(List dest,List src):将src中的内容复制到dest中。
(12)boolean replaceAll(List list,Object oldVal,Object newVal):使用新值代替List中。