List、Set、Map接口
List: 有序、可以重复、可以为空(null)
Set: 无序、不可重复
Map:
(1)key:不可重复,可以为空
(2)value:可以为空,可以重复
List实现类
ArrayList: 查询数据量大(线程不安全)
LinkedList:修改或插入删除业务逻辑(线程不安全)
Vector:实现线程安全的list集合
ArrayList
底层实现:可变数组
常用方法
boolean add(Object 0)
在列表的末尾顺序添加元素,
起始索引位置从0开始
在指定的索引位置添加元素。
void add(int index,Object 0)
索引位置必须介于0和列表中元素个数之间
int size()
返回列表中的元素个数
Object get(int index)
返回指定索引位置处的元素。取出的元素是
Object类型,使用前需要进行强制类型转换
boolean contains(Object 0)
判断列表中是否存在指定元素
boolean remove(Object 0)
从列表中删除元素
从列表中删除指定位置元素,
Object remove(int index)
起始索引位置从0开始
LinkedList
底层实现:链表
特有方法
void addFirst(Object 0)
在列表的首部添加元素
void addLast(Object 0)
在列表的末尾添加元素
Object getFirst()
返回列表中的第一个元素
Object getLast()
返回列表中的最后一个元素
Object removeFirst()
删除并返回列表中的第一个元素
Object removeL ast()
删除并返回列表中的最后一个元素
Vector
底层实现: 可变数组,只是实现了线程安全的效果
使用场景:多线程场景下使用
常用方法
和ArrayList一致
Set实现类
HashSet:快速去重
LinkedHashSet:按照插入顺序获得元素
TreeSet :自定义、自然排序元素内容
HashSet
特点:
(1)不可重复:
添加元素时,会进行hashCode值和equals方法的调用判断对象是否相同
1. 两个对象的hashCode是否相同
–相同–》equals
----》true:当前要添加的元素和集合中的某个元素重复
–不相同(不会调用equals方法)
(2)无序,无法排序
底层实现
常用方法
// contains
/**
contains : 调用hashCode方法比较值是否相同,然后调用equals方法比较值是否返回true,如果都相同则判断为相同对象
*/
HashSet set = new HashSet();
Person p1 = new Person("张三",101);
Person p2 = new Person("李四",102);
Person p3 = new Person("王五",101);
set.add(p1);
set.add(p2);
boolean contains = set.contains(p3);
System.out.println(contains);
LinkedHashSet
底层实现:链表+HashMap
用法场景:要保证set集合是按照插入顺序来迭代时使用
常用方法
HashSet一致
Map实现类
HashMap :快速存取、查询key-value数据
LinkedHashMap:想按照元素插入的顺序获取数据
TreeMap:自定义、自然排序
HashMap
//常用方法
Object put(Object key, Object val)
以“键-值对”的方式进行存储
Object get (Object key)
根据键返回相关联的值,如果不存在指定
的键,返回null
Object remove (Object key)
删除由指定的键映射的“键-值对”
int size()
返回元素个数
Set keySet ()
返回键的集合
Collection values ()
返回值的集合
boolean containsKey (Object key)
如果存在由指定的键映射的“键-值对”
返回true
LinkedHashMap
用法场景:要保证map集合是按照插入顺序来迭代时使用
常用方法和hashMap一致
TreeMap
自然排序:
(1)字符串、字符:unicode编码从小到大升序
(2)数字类型:数值从小到大
(3)时间类型:Date 时间戳大小从小到大(从过去到现在)
常用方法-排序
数据类:
public class Person implements Comparable{
public int idCode;
public String name;
@Override
public int compareTo(Object o) {
System.out.println("--调用compareTo方法");
Person o1 = (Person) o;
return this.idCode - o1.idCode;
}
}
Person p1 = new Person("张三",101);
Person p2 = new Person("李四",102);
Person p3 = new Person("王五",103);
TreeMap treeMap = new TreeMap();
treeMap.put(p1,"101");
treeMap.put(p2,"102");
treeMap.put(p3,"103");
LinkedList 和 ArrayList区别
共同点:(List集合的特性)
(1)元素可以重复
(2)都可以使用索引访问
ArrayList
优点:
(1)查询速度快
缺点:
(1)插入、删除速度慢
LinkedList
优点:
(1)插入、删除速递快
缺点
(1)查询速度慢
集合遍历
- 传统循环(for、while、do-while)
- 迭代器循环(Iterator):List、Set、Map
迭代器
Set set = treeMap.keySet();
Iterator iterator = set.iterator();//获取迭代器
while(iterator.hasNext()){
System.out.println(iterator.next());
}
增强循环 forech 循环
//集合
HashSet set = new HashSet();
set.add(p1);
set.add(p2);
set.add(p3);
set.add(p4);
set.add(p5);
for(Object temp : set){
System.out.println(temp);
}
//数组
for(int i : arr){
System.out.println(i);
}
java1.8 新特性 lambda表达式-遍历
简化了代码的开发方式
List \Set集合遍历
list.stream().forEach(person ->{
//person: 集合中每一个对象
System.out.println(person);
});
Map集合遍历
map.forEach((k,v) -> System.out.println(k+"--"+v) );//单行
map.forEach((k,v) -> {//多行
Object key = k;
Object value = v;
System.out.println(k+"---"+v);
});
Collections工具类
//常用方法
reverse(List):反转 List 中元素的顺序
shuffle(List):对 List 集合元素进行随机排序
sort(List):根据元素的自然顺序对指定 List 集合元素按升序排序
sort(List,Comparator):根据指定的 Comparator 产生的顺序对 List 集合元素进行排序
swap(List,int i, int j):将指定 list 集合中的 i 处元素和 j 处元素进行交换
Object max(Collection):根据元素的自然顺序,返回给定集合中的最大元素
Object min(Collection)
int frequency(Collection,Object):返回指定集合中指定元素的出现次数
void copy(List dest,List src):将src中的内容复制到dest中
boolean replaceAll(List list,Object oldVal,Object newVal):使用新值替换 List 对象的所有旧值
unmodifiableCollection(Collection) 设置集合只读,下次添加报错
集合常见问题解决
边遍历边删除-只能使用迭代器删除
//1 . 迭代器删除
Iterator iterator = list.iterator();
while(iterator.hasNext()){
if((Integer) iterator.next() == 2){
iterator.remove();
}
}
数组和集合之间的转换
数组转集合:Arrays.asList()
集合转数组: list.toArray()
感谢各位看官,如果喜欢的话点赞给我多多支持,我会一直出Java全栈开发课程内容,蟹蟹大家~磕头