本章内容
java集合框架
collection接口API
iterator迭代器接口
collection子接口之一:Set接口
HashSet linkedHashSet TreeSet
collection子接口之二:List接口
ArrayList LinkedList Vector
Map子接口
HashMap TreeMap Hashtable
存储对象可以考虑:1.数组;2.集合
数组:
数组存储对象的特点:Student[] stu = new Student[20]; stu[0] = new Student();…
数组弊端:1.一旦创建其长度不可变,如果要继续添加需要重新创建一个数组,并将数据拷过去;2.真实的数组存放的对象个数是不可知的;
集合:
Collection接口
|-------List接口:元素有序、可重复的集合
|-------ArrayList(主要的实现类,非线程安全的)
LinkedList(对于频繁的插入,删除操作,非线程安全的) Vector(古老的实现类,线程安全的)
|-------Set接口:元素无序、不可重复的集合
|-------HashSet(主要实现类)
linkedHashSet(以链表形式存在的Set) TreeSet(只能添加同一类型元素的Set)
Map接口:
|-------HashMap接口:具有映射关系“key-value对”的集合
LinkHashMap TreeMap Hashtable(子类:Properties)
Collection接口
//Collection类中的重要的方法
Collection coll = new ArrayList();
//返回集合中元素的个数
coll.size();
//.add(Object object)向集合中添加一个元素,默认是对象
coll.add(123);
//.addAll(Collection coll)向集合中添加新集合的所有元素
Collection coll1 = new Collection(1,2,3);
coll.addAll(coll1);
//判断集合是否为空
coll.isEmpty();
//清空集合元素
coll.clear();
//判断集合中是否包含指定的obj元素
coll.contains(123);
//判断某个集合中是否包含另一个集合的所有元素
coll.containsAll(coll1);
//集合之间求交集,并返回给当前集合。
coll.retainAll(coll1);
//删除集合中的obj元素,并返回Boolean类型。
coll.remove("88");
//删除当前集合中删除包含在coll1中的元素,求差集
coll.removeAll(coll1);
//判断两个集合中所有元素是否相等
coll.equals(coll2);
//将集合转换成数组
Object obj = coll.toArray();
//素组转化成集合
Collection coll = Arrays.asList(1,2,3);
//集合遍历,返回一个Iterator接口实现类的对象
Iterator iterator = coll.iterator();
while(iterator.hashNext()) {
System.out.println(iterator.next());
}
集合遍历
用迭代器遍历
Iterator iterator = coll.iterator();
while(iterator.hashNext()) {
System.out.println(iterator.next());
}
用增强for循环遍历
for(Object i:coll) {
System.out.println(i);
}
List
//ArrayList接口:List中相对于Collection,新增加的方法
void add (int Index, Object ele):在指定的索引位置index添加元素ele
boolean addAll (int index, Collection eles)
Object get (int index):获取指定索引的元素
Object remove (int index):删除指定索引位置的元素
Object set (int index, Object ele):修改指定位置的元素
int indexOf (Object obj):返回obj在集合中首次出现的位置, 没有就返回-1
int lastIndexOf (Object obj):返回obj在集合中最后出现的位置, 没有就返回-1
List subList(int fromIndex, int toIndex)返回从fromIndex到toIndex结束左闭右开的一个子List
List常用的方法:增(add())、删(remove (int index))、改(set(int index, Object obj))、查(get (int index))、插(add (int Index, Object ele))、长度(size());
set
set:存储的元素是无序的,不可重复的。
无序性不等于随机性
说明:要求添加进set中的元素所在的类,一定要重写equals()和hashCode()方法,进而保证set中元素的不可重复性。
set中的所有方法都是来源于collection接口中的方法
hashSet和linkedHashSet的区别:hashSet存储元素是无序的,而LinkedHashSet存储是、元素是有序的,它使用链表维护了添加进去的顺序,当我们遍历时是按照顺序遍历的。
TreeSet的特点:
向TreeSet中添加的元素必须是同一个类的;
可以按照添加进集合中的元素的指定顺序遍历。向String,包装类等默认按照从小到大的顺序遍历。
当向TreeSet中添加自定义类的对象时,有两种排序方法:①自然排序②定制排序
自然排序,要求自定义类实现java.lang.Comparable接口并重写其compareTo (Object obj)的抽象方法。在此方法中,按照自定义类的哪个属性进行排序;compareTo()与hashCode()以及equals()三者保持一致
定制排序,创建一个实现了Comparator接口的类对象,向TreeSet中添加Customer类的对象,在此compare()方法中,指明是按照Customer的哪个属性排序的。
Map接口:
Map与Collection并列存在。用于保存具有映射关系的Key-Value对。
Map中的Key和Value都可以是任何引用类型的数据
Map中的key用Set来存放,不允许重复,即同一个Map对象所对应的类,须重写hashCode()和equals()方法。
常用String类作为Map的“键”。
key和value之间存在单向一对一关系,即通过指定的key总能找到唯一的、确定的value。
HashSet是HashMap的一个特殊的实现。
如下图所属,在Map中Key是一个set,所以key不能重复,而values是一个Collection,值是可以重复的。而一个键值对是一个基本单元,被称为Entry,而Entry与Entry之间又是一个Set,所以它们之间是不能重复的。
Map中常用的方法:
Map map = new HashMap();
//往Map中添加元素
map.put("AA", 213);
map.put(null,null);
//返回Map的长度
map.size();
//删除Map中的元素
map.remove("AA");
//将新Map中的所有元素添加进来
map.putAll(newMap);
//清空Map中的所有元素
map.clear();
//获取指定key的value值
map.get("AA");
//遍历key集
Set set = map.keySet();
for(Object obj : set){
System.out.println(obj);
}
//遍历value集
Collection values = map.values();
Iterator i = values.iterator();
while(i.hashNext()){
System.out.println(i.next());
}
//遍历key-value对
Set set1 = map.keySet();
for(Object obj:set1){
System.out.println(obj + "---- + map.get(obj));
}
HashMap 和 LinkedHashMap的区别等同于hashSet与linkedHashset的区别
Hashtable是一个古老的Map实现类,线程安全。
HashMap与Hashtable的区别:Hashtable线程安全。;Hashtable不允许使用null作为Key和value。
Hashtable的一个子类Properties
常用来处理属性文件,键和值都为String类型
Collections工具类
操作Collection以及Map的工具类,Collections
面试题:区分Collection与Collections
Collection是一个接口,与存储数据相关,其下有List和Set两个子接口,可以存储不同数据特点的元素。
Collections是操作这些集合的工具类,不仅可以操作collection还可以操作Map
collections常用方法
List list = new ArrayList();
list.add(123);
list.add(234);
//反转List中元素的顺序
Collections.revers(list);
//对List集合元素进行顺序随机排序
Collections.shuffle(list);
//根据元素的自然顺序对指定List集合元素按升序排序。
Collection.sort(list);
//将指定List集合中的i处元素和j处元素进行交换。
Collections.swap(list, 0, 2);