提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
提示:以下是本篇文章正文内容,下面案例可供参考
一、集合是什么?
1.集合是一种容器,与数组类似,不同的是集合的大小不是固定的,比数组好用。
2.集合和数组的区别:
- 长度区别:数组长度固定,集合长度可变。
- 内容区别:数组可以是基本类型,也可以是引用类型;集合只能是引用类型。
- 元素内容:数组只能储存同一种类型;集合可以储存不同类型(其实集合一般存储的也是同一种类型)
二、集合的分类
1.单列Collection集合
- 单列集合的体系结构
Collection集合特点- List系列集合:添加的元素是有序、可重复、有索引;底层是数组结构,查询快、增删慢。
- ArrayList、LinkedList:有序、可重复、有索引;双链表结构,查询慢,增删快。
- List系列集合:添加的元素是有序、可重复、有索引;底层是数组结构,查询快、增删慢。
- Set系列集合:添加的元素是无序、不重复、无索引
- HashSet:无序、不重复、无索引;哈希表结构(JDK7:数组+链表)(JDK8数组+链表+红黑树)
- 为保证元素的唯一性需要复写hashCode和equals。
- LinkedHashSet:有序、不重复、无索引
- TreeSet:按照大小默认升序排序、不重复、无索引
- Comparable自然排序,Comparator比较器(自己定义的类需要在集合创建时定义比较规则)
- HashSet:无序、不重复、无索引;哈希表结构(JDK7:数组+链表)(JDK8数组+链表+红黑树)
2.双列Map集合
- 双列集合的体系结构
- Map接口
- HashMap类:HashSet的底层原,特点与HashSet相同
- TreeMap类:TreeSet的底层,特点与TreeSet相同
- LinkedHashMap类:LinkedHashSet的底层,特点与LinkedHashSet相同
- Map接口
三、集合的常用API方法
1.Collection通用方法
add 添加元素到集合末尾
list.add("张三");
remove 删除指定元素
list.remove("李四");
removeof 按条件删除元素
list.removeIf(s -> s.startsWith("张"));
contains 判断元素在集合中是否包含
boolean b1 = list.contains("李四");
toArray:把集合转换为数组
Object[] arr = list.toArray();
clear 清空集合
list.clear();
判断集合是否为空
System.out.println(list.isEmpty());
collection遍历方法
Collection集合的遍历方式
1)迭代器遍历
//1.获取迭代器对象
Iterator<String> it = list.iterator();
//2.判断是否有元素可以迭代(获取)
while (it.hasNext()){
//3.把元素获取出来
String element = it.next();
System.out.println(element);
}
2)增强for遍历 //底层原理是迭代器
//增强for遍历: 其中String s表示每一个元素
for (String s : list) {
System.out.println(s);
}
3)forEach遍历 //底层原理是迭代器
//forEach方法底层会将集合中的元素依次赋值给s, 你打印s就是在打印元素
list.forEach(s -> System.out.println(s));
2.Map通用方法
HashMap<String, Integer> map = new HashMap<>();
put 添加键值对
map.put("张三",18);
map.put("李四",20);
get 根据键获取值
String s1 = map.get("张三");
remove 根据键删除键值对
map.remove("张三");
containsKey 判断是否包含键
boolean b = map.containsKey("李四");
clear 清空集合
map.clear();
size 获取键值对的个数
boolean c = map.isEmpty();
map遍历方法
keySet() 获取所有的键,返回键的集合Set
//第一步:调用keySet()方法获取所有的键,该方法会将所有的键存入Set集合,并返回Set集合
Set<String> set = map.keySet();
//第二步:遍历Set集合,获取每一个键
for (String key : set) {
//第三步:通过每一个键获取值
String s = map.get(key);
System.out.println(s);
entrySet() 获取所有的键值对的集合Set
//第一步:获取所有【键值对】对象,存到一个Set集合中,并把集合返回
Set<Map.Entry<String, String>> entries = map.entrySet();
//第二步:遍历Set集合
for (Map.Entry<String, String> entry : entries) {
String key = entry.getKey();
String value = entry.getValue();
//第三步:entry表示每一个【键值对】的对象,获取键值对的键,获取键值对的值
System.out.println(key+"-----"+value);
}
forEach() 直接遍历键和值
//调用forEach方法遍历
map.forEach((key, value) -> System.out.println(key + "-------" + value));
}
3.Collections工具类
三、Collections工具类
1.Collection和Colltions有什么区别?s
Collection:单列集合的根接口
Colltions: 操作集合的工具类
2.Colltions工具类的常用方法
ArrayList<String> list = new ArrayList<>();
//一次性添加多个元素
Collections.addAll(list,"bbb","ccc","ddd","aaa");
System.out.println("初始状态:"+list);
//把集合中的元素打乱
Collections.shuffle(list);
System.out.println("打乱后:"+list);
//对集合中元素进行排序
Collections.sort(list);
System.out.println("默认排序后::"+list);
//对集合中的元素按照指定规则排序,通过比较器指定
Collections.sort(list, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
//compareTo是字符串本身就具备的比较方法,通过这个方法的返回值是负数、0、正数确定谁在前,谁在后
return o2.compareTo(o1);
}
});
System.out.println("降序排序后::"+list);