集合框架
在Collection链中,Collection,List,Set,SortedSet是接口,其余是类。
在Map链中,Map和SortedMap是接口,其余的是类。
一.集合框架主要包括两大块:
- Collection接口:是集合框架的顶级接口,即是List和Set的父接口,但不是Map集合 的父接口(面试常考) ------集合中只能添加应用类型的数据
List集合:
1>特性:
有序性:输出顺序与添加顺序一致
唯一性:添加的对象可以重复
2>遍历方式:
>for循环遍历(利用下标)
>foreach循环
>迭代器Iterator(快捷键Ctrl+1快速实现)
方法:
hasNext():判断集合中是否有下一个元素
next():找到并取出集合中的下一个元素
>删除:
List list = new ArrayList<>();
list.add("小一");
list.add("小二");
list.add("小三");
list.add("小三");
//逆向删除直接删除第一个(还剩0个)
for (int i=list.size()-1; i>=0; i--) {
list.remove(0);
}
//正向删除思维(还剩2个)
for (int i = 0; i <list.size(); i++) {
list.remove(i);
}
//逆向删除思维(还剩0个)
for (int i = list.size()-1; i>=0; i--) {
list.remove(i);
}
//迭代器删除(还剩0个)
Iterator nn = list.iterator();
nn.next();
while(nn.hasNext()) {
nn.remove();
}
3>List的优化:
默认初始容量为10,负载因子为0.5
扩容公式:容量当前大小+10*负载因子
//指定初始容量
List<Student> list = new ArrayList<Student>(4);
扩容后的大小:4+10*0.5=9
4>泛型:以类型作为参数的类,默认值是Object
作用:提高代码的健壮性,简化代码(即不用转型)
5>装箱,拆箱:(类似于包裹的包装和拆封)
装箱:值类型–>引用类型
例:
int a = 5;
Ingter n = new Ingter(a);
拆箱:引用类型–>值类型
例:
Ingter n = new Ingter(5);
int a = n.intValue();
6>ArrayList,LinkedList,Vector的区别:
ArrayList:以连续的数组结构存储数据,查询块(下标)、增删改慢;
LinkedList:以链表的结构存储数据,查询慢、增删改快
Vector:增删改查都慢,已过时
Set集合:
1>特性:
无序性:数据的存入顺序和输出顺序不一致
唯一性:重复的数据会被过滤掉
(可用对象的序列化(即实现Serializable接口)和利用hashCode()方法,equals()方法验证)
2>遍历方式:
foreach循环:
```
Set<String> set = new HashSet<>();
set.add("zs");
set.add("ls");
set.add("ww");
set.add("ww");
//foreach遍历
for (String str : set) {
System.out.println(str);
}
//迭代器遍历
Iterator<String> it = set.iterator();
while(it.hasNext()) {
System.out.println(it.next());
}
```
3>常用的类:
TreeSet:根据某种规则(自行定义)对集合中的元素进行排序
自然比较接口:java.lang.Comparable
实现类实现该接口并实现排序方法,定义排序规则
比较器:java.util.Comparator(String以AscII码进行比较,返回差值1/-1/0)
新建一个类实现Comparator接口
4>LinkedHashSet:
元素是有序的,是不重复的,底层数据结构是按照链表的结构存储数据的。
Map集合:(它不是Collection的子类)
1>特性:
无序:数据存入的顺序与输出的顺序不一致
键值对:以键值对的形式添加元素,键不能重复,值可以重复
2>遍历方式:
2.1 先取出保存的的所有键的Set,再遍历Set
//键
Set<String> key = map.keySet();
for (String k : key) {
System.out.println(k);
}
//值
Collection<String> val = map.values();
for (String v : val) {
System.out.println(v);
}
2.2 先取出保存的所有的Entry的Set,在遍历Set
//键值对
Set<Entry<String, String>> entryset = map.entrySet();
for (Entry<String, String> entry : entryset) {
String k = entry.getKey();
String v = entry.getValue();
System.out.println(k+"="+v);
}
3>HashMap与HashTable的区别:
HashMap: 异步的 非安全的
HashTable: 同步的 安全的(Synchronized)
4>其他:
4.1 Collection:工具类
提供一组静态方法操作Collection集合
4.1 Arrays:工具类
提同一组静态方法操作数组
例:
//遍历集合
List<String> asList = new ArrayList<>(Arrays.asList(new String[] {"zs","ls","ww"}));
System.out.println("添加元素前的长度"+asList.size());
asList.add("hh");
System.out.println("添加元素后的长度"+asList.size());