集合体系结构:
1、单列集合:一次添加一个数据

List系列:添加元素有序、可重复、有索引
有序:存取顺序一致
可重复:元素可重复
有索引:可通过索引获取每一个元素
Set系列:添加元素无序,不重复,无索引
无序:存取顺序可能不一致
不重复:集合中元素不能重复(数据去重)
无索引:不能通过索引获取元素
Collection:单列集合最高接口,所有单列集合都能继承使用方法
方法:

conntains方法:


Collection的遍历:
1、迭代器遍历
迭代器:在Java中的类是Iterator,集合专用遍历方式
相关方法


注意事项:
1、迭代器遍历完成不会复位,重新遍历必须重新创建一个迭代器对象
2、一次循环只能用一次next
3、迭代器遍历时(过程中)不能用集合的方法进行添加或删除,若要删除,则需要用迭代器的remove方法删除
2、增强for遍历
单列集合和数组才能用增强for遍历
格式:
for(元素数据类型 变量名:遍历的集合或数组){
}
括号里的变量用来储存数据的临时变量
快速生成方式:集合名字.for
3、lambda表达式遍历
匿名内部类表示方法:

lambda表达式表示方法:

Collection总结:

List:
继承了Collection所有方法
新增索引操作方法:
list的独有遍历方式:
1、迭代器遍历
2、增强for遍历
3、lambda遍历
前三者与Collection的遍历方式一致
4、列表迭代器遍历
ListIterator:获取列表迭代器对象
迭代器.add()可在遍历过程中添加元素
5、普通for循环
利用size和get方法以及循环,通过索引把所有元素获取出来
五种遍历方式总结
LinkedList
即为一个双向链表
方法(用的不多)

Set
HashSet
底层采用哈希表存储数据,总体方法与Collection相差不多
哈希表:增删改查性能较好
哈希值:对象的整数表现形式
属性值相同,对应的哈希值就相同

对象的哈希值特点:

HashSet存储原理:
加载因:存储元素个数等于数组长度乘以加载因时,数组自动扩容一倍
链表长度大于8且数组长度大于等于64时,链表自动转为红黑树

存储数据:
存储数据顺序不确定,因此按数组和链表顺序取数据时无法按照存入对象的顺序读取数据
去重机制:
通过HashCode与equals方法进行去重验证
LinkedHashSet:
有序,底层仍为哈希表,每个元素新增了一个双向链表机制,记录了储存的顺序,因此可以从头结点开始遍历至尾结点
TreeSet:
总体方法与Collection相差不多
可排序:底层基于红黑树实现,增删改查性能较好
排序:
数字:按从小到大排序
字符、字符串:按ASCII码升序排列(字符串从首字母开始比较,与字符数字无关)
两种比较方式:
方式一:默认排序/自然排序
Javabean类实现comparable接口指定比较规则

方式二:
创建TreeSet对象时,传递比较器Comparator指定规则(compareTo无法实现时使用,如对字符串、整数等Java已定义排序规则的数据类型时指定特定的排序规则)

实际应用举例

单列集合使用场景

2、双列集合:一次添加一对数据(键值对)
特点:
1、一次添加一对数据(键值对)
2、键不可重复,值可重复
3、键值一一对应
4、键值对称为键值对对象,Java中称为Entry对象

Map:双列集合顶层接口
方法:

put(添加/覆盖):
添加对象时,若键不存在,则直接添加到map集合中,并返回null;若键存在,则会覆盖原有的键值对对象,并将原来的元素返回
remove:
删除整个键值对,并把值返回
map的遍历:
1、键找值:
keySet:把键存入一个单列集合
get(Key):通过键得到值

import java.util.*;
import java.util.function.Consumer;
public class Main {
public static void main(String[] args) {
Map<String,String> map = new HashMap<>();
map.put("A", "B");
map.put("C", "D");
map.put("E", "F");
Set<String> strings = map.keySet();
//增强for遍历
for(String s : strings) {
System.out.println(s+" : "+map.get(s));
}
//迭代器遍历
Iterator<String> iterator = map.keySet().iterator();
while(iterator.hasNext()) {
String key = iterator.next();
String value = map.get(key);
System.out.println(key+" : "+value);
}
//lambda表达式遍历
strings.forEach(s -> System.out.println(s+" : "+map.get(s)));
}
}
2、键值对获取
entrySet:将键值对存入单列集合中
import javax.print.DocFlavor;
import java.util.*;
import java.util.function.Consumer;
public class Main {
public static void main(String[] args) {
Map<String,String> map = new HashMap<>();
map.put("A", "B");
map.put("C", "D");
map.put("E", "F");
Set<Map.Entry<String,String>> strings = map.entrySet();
//增强for遍历
for(Map.Entry<String,String> s: strings) {
System.out.println(s.getKey() + " " + s.getValue());
}
//迭代器遍历
Iterator<Map.Entry<String,String>> iterator = strings.iterator();
while(iterator.hasNext()) {
Map.Entry<String,String> m = iterator.next();
String value = m.getValue();
String key = m.getKey();
System.out.println(key+" : "+value);
}
//lambda表达式遍历
strings.forEach(s -> System.out.println(s.getKey()+" : "+s.getValue()));
}
}
3、lambda表达式遍历

import javax.print.DocFlavor;
import java.util.*;
import java.util.function.BiConsumer;
import java.util.function.Consumer;
public class Main {
public static void main(String[] args) {
Map<String, String> map = new HashMap<>();
map.put("A", "B");
map.put("C", "D");
map.put("E", "F");
Set<Map.Entry<String, String>> strings = map.entrySet();
map.forEach((String string, String string2) -> System.out.println(string + ": " + string2));
}
}
HashMap
特点:

底层为哈希表结构,对比键的属性值
方法:
与Map一致
LinkedHashMap
特点:
有序,不重复,无索引,存取顺序一致
方法:
与Map一致
TreeMap:
特点:
增删改查性能较好

统计思想:



1980

被折叠的 条评论
为什么被折叠?



