第九章、集合
存入相同性质的元素,其实是Object类型的数组,八种基本类型会转换成包装类再存放
List
LinkedList和ArrarList类
ArrayList内存连续存放,元素有序(按照元素存入的顺序存入元素),元素可以重复和为null,元素类型任意
查询和修改效率高,但是增加和删除效率低
LinkedList内存不连续,元素有序(按照放入的顺序存放元素),元素可以重复和null,元素类型任意
插叙和修改我效率低,但是增加和删除效率高
有三种迭代方式,普通for,增强for,利用iterator迭代遍历
增加方法
add()
直接在后面添加元素,如果写了索引值只能为最后一个元素加一的索引,不能跳跃添加
arr.add("hello");
arr.add(1,"hello");
删除方法
remove()
arr.remove(1);
arr.remove("hello");
可以根据元素或是下表删除元素
修改方法
set()
修改指定位置下标的值
arr.set(1,"world");
查询方法
indexOf()
查询集合中指定元素的下标
arr.indexOf("hello");
isEmpty()
判断集合是否为空
arr.isEmpty();
contains()
判断集合中是否包含此元素
arr.contains("hello");
retainAll()
在arr中保留在arr2中存在的元素
arr.retainAll(arr2);
size()
查询集合的长度
arr.size();
List子类Vector类
线程安全
Set
遍历方式有两种,增强for和利用iterator迭代
HashSet类
元素可以任意,元素可以为null,元素不可重复,元素无序(根据哈希值排序),没有下标
增加方法
add()
arr.add(10);
直接添加元素,没有下标
删除方法
remove()
arr.remove("hello");
删除指定元素
修改方法
没有修改方法,但是可以通过先把原元素删除,之后再添加一个新元素
查询方法
isEmpty()
判断集合是否为空
arr.isEmpty();
contains()
判断集合中是否包含此元素
arr.contains("hello");
retainAll()
在arr中保留在arr2中存在的元素
arr.retainAll(arr2);
size()
查询集合的长度
arr.size();
HashSet子类LinkedHashSet类
解决了HashSet无序的问题,方法一致
TreeSet类
用来存放一组相同类型的数据,在使用时使用泛型指定类型,
有两种比较方式,一种是在元素中直接实现Comparable接口,调用元素中的Comparato方法进行比较
另一种是创建比较类实现Comparator接口的比较器,在创建TreeSet对象时将比较器作为参数传递进去
元素有序(按照自然顺序进行比较),元素不可以重复,不可以为null,不可以为任意类型,没有下标
两种比较方式
增加方法
add()
arr.add(10);
直接添加元素,没有下标
删除方法
remove()
arr.remove("hello");
删除指定元素
修改方法
没有修改方法,但是可以通过先把原元素删除,之后再添加一个新元素
查询方法
isEmpty()
判断集合是否为空
arr.isEmpty();
contains()
判断集合中是否包含此元素
arr.contains("hello");
retainAll()
在arr中保留在arr2中存在的元素
arr.retainAll(arr2);
size()
查询集合的长度
arr.size();
两种比较方式
定义可比较的元素
在元素中实现COmparable接口,重写compareTo方法,此种比较方式只有有一个比较规则,一般不推荐
定义比较器
写一个类实现Comparator接口,重写compare方法,每个类代表一种比较方式,此种方式在创建TreeSet对象时要将比较器的对象作为参数传入
Map
键值对集合
HashMap类
key:元素可以为任意类型,可以为null,不可以重复,无序
value:元素可以为任意类型,可以为null,可以重复,元素无序
一般根据需求指明泛型
增加方法
put()
将键值对存入集合
hashMap.put("aaa",10);
删除方法
remove()
hashMap.remove("aaa");
可以根据键或者键值对来删除键值对
修改方法
put()
hashMap.put("aaa",20);
即可以是增加方法,也可以是修改方法
查询方法
size()
HaspMap.size();
查询键值对集合的长度
containskey()
hashMap.containsKey();
查看键值对集合里面是否有这个键
containsValue()
hashMap.containsValue();
查看键值对集合里面是否有这个值
isEmpty()
hashMap.isEmpty();
判断键值对集合是否为空集合
遍历
两种遍历方式,一种是先获取key集合,再通过key集合获取value来遍历
keySet()
//1.先获取key集合,再通过keySet集合获取balue遍历
Set<String> keySet =hashMap.keySet();
//1.1增强for遍历
System.out.println("-----增强for遍历----");
for (String key : keySet) {
System.out.println(key+":"+hashMap.get(key));
}
//1.2迭代器遍历
System.out.println("-----迭代器遍历-----");
Iterator<String> iter1 = keySet.iterator();
while(iter1.hasNext()){
String key = iter1.next();
System.out.println(key+":"+hashMap.get(key));
}
一种是直接获取键值对集合,再一次获取键值对
entrrySet()
//2.直接获取键值对集合,再通过键值对集合遍历键值对
Set<Map.Entry<String,Object>> kAndVSet = hashMap.entrySet();
//2.1增强for遍历
System.out.println("------增强for-----");
for (Map.Entry<String, Object> stringObjectEntry : kAndVSet) {
System.out.println(stringObjectEntry.getKey()+":"+stringObjectEntry.getValue());
}
//2.2迭代器遍历
System.out.println("----迭代器循环-----");
Iterator<Map.Entry<String,Object>> iter2 = kAndVSet.iterator();
while(iter2.hasNext()){
Map.Entry<String,Object> keyAndValue = iter2.next();
System.out.println(keyAndValue.getKey()+":"+keyAndValue.getValue());
}
HashMap的子类LinkedHashMap类
解决了HashMapkey无序的问题,方法一致
HashTable
键值都不能为null,线程安全,方法一致
TreeMap类
key:元素类型需要一致,不可以,不可以重复,有序[根据元素的自然顺序排序]
value:元素可以为任意类型,可以为null,可以重复,元素无序
一般根据需求指明泛型
自动根据key的自然顺序排序
增加方法
put()
将键值对存入集合
TreeMap.put("aaa",10);
删除方法
remove()
TreeMap.remove("aaa");
可以根据键或者键值对来删除键值对
修改方法
put()
TreeMap.put("aaa",20);
即可以是增加方法,也可以是修改方法
查询方法
size()
TreeMap.size();
查询键值对集合的长度
containskey()
TreeMap.containsKey();
查看键值对集合里面是否有这个键
containsValue()
TreeMap.containsValue();
查看键值对集合里面是否有这个值
isEmpty()
TreeMap.isEmpty();
判断键值对集合是否为空集合
遍历
两种遍历方式,一种是先获取key集合,再通过key集合获取value来遍历
keySet()
//1.先获取key集合,再通过keySet集合获取balue遍历
Set<String> keySet =TreeMap.keySet();
//1.1增强for遍历
System.out.println("-----增强for遍历----");
for (String key : keySet) {
System.out.println(key+":"+TreeMap.get(key));
}
//1.2迭代器遍历
System.out.println("-----迭代器遍历-----");
Iterator<String> iter1 = keySet.iterator();
while(iter1.hasNext()){
String key = iter1.next();
System.out.println(key+":"+TreeMap.get(key));
}
一种是直接获取键值对集合,再一次获取键值对
entrrySet()
//2.直接获取键值对集合,再通过键值对集合遍历键值对
Set<Map.Entry<String,Object>> kAndVSet = TreeMap.entrySet();
//2.1增强for遍历
System.out.println("------增强for-----");
for (Map.Entry<String, Object> stringObjectEntry : kAndVSet) {
System.out.println(stringObjectEntry.getKey()+":"+stringObjectEntry.getValue());
}
//2.2迭代器遍历
System.out.println("----迭代器循环-----");
Iterator<Map.Entry<String,Object>> iter2 = kAndVSet.iterator();
while(iter2.hasNext()){
Map.Entry<String,Object> keyAndValue = iter2.next();
System.out.println(keyAndValue.getKey()+":"+keyAndValue.getValue());
}
Util类
Arrays类
sort()
对数组进行排序
aslist()
将数组转换成List列表,被转换后的集合不可被改变
Collections类
sort()
将集合进行自然顺序排序
shuffle()
将集合中的元素打乱
Queue类
队列,先进先出
Stack
栈,先进后出
push(E e)
进栈
E Pop()
出栈
iterator()
生成一个迭代器对象来遍历集合元素
Iterator iter = arr.iterator();