集合容器的学习
collection接口:
-
集合中不能直接存储基本数据类型,也不能存储java对象,只是存储java对象的内存地址,基本数据类型会自动装箱。
-
boolean add(E e):将给定元素转存到对象集合中
-
boolean remove(Object o):将对象集合中与给定元素移除
-
void clear():清空集合
-
boolean contains(Object o):判断集合是否包含给定元素
-
boolean isEmpty():判断集合是否为空
-
int size():获取集合长度
-
boolean addAll(Collection c) :将给定集合中的元素转存到对象集合中
-
boolean removeAll(Collection c):将当前集合中与给定集合中相同的元素移除掉
-
boolean containsAll(Collection c) :保留当前集合与给定集合相同的元素
-
boolean retainAll(Collection c):将对象集合中与给定集合中不同的元素移除
-
子接口
-
--List接口:存和取有序,可以重复
-
public interface List
extends Collection - List接口中的方法
- void add(int index,E element)(插入功能) :将参数2插入到集合中的参数1索引位置
- E remove(int index):根据给定的索引从集合中移除元素,并将移除的元素返回
- E get(int index):(获取功能)返回根据给定的索引处集合中元素
- E set(int index,E element): (替换功能) 使用参数2替换参数1索引处的元素,并将被替换的元素返回
- int indexOf(Object obj):返回obj首次出现位置
- int lastIndexOf(Object obj):返回obj最后一次出现位置
- list subList(int fromIndex,int toIndex):返回从fromIndex到toIndex位置的集合
- ArrayList:作为list主要实现类,线程不安全效率高;底层使用Object[] elementData存储,默认扩容为原来的1.5倍
- LinkedList:对于频繁的插入、删除操作,使用此类效率比ArrayList高;底层是链表
- Vector:作为list接口的古老实现类,线程安全,效率低;底层使用Object[] elementData存储,默认扩容为原来的2倍
- 总结:这三个实现类的异同点:同--都实现了list接口,存储数据特点相同:存取有序可重复;
- 异--见上
-
--set:存和取无序,不可以重复
-
HashSet:不包含重复元素并且最多包含一个null的集合线程不同步,线程不安全,效率高;删除需要使用迭代器的移除方法
- LinkedHashSet:底层链表和哈希表,不同步,线程不安全,效率高;删除需要使用迭代器的移除方法
-
TreeSet:底层是二叉树元素唯一有序,底层使用TreeMap类实现
-
自然顺序排列Comparable接口:0-9,a-z;
-
比较器(精确)排序Comparator接口
-
TreeSet():空参使用的是自然排序
-
TreeSet(Comparator<? super E> comparator) :有参构造,使用的是比较器(精确)排序
-
o1.compareTo(o2);//o1-o2 默认从小到大
-
-
collections中的方法:
public static void reverse(List<?> list):反转集合中的元素
public static void shuffle(List<?> list):打乱集合中的元素
public static int indexOfSubList(List<?> source,List<?> target):查找子串在集合中首次出现的位置
public static int lastIndexOfSubList(List<?> source,List<?> target):查找子串在集合中首次出现的位置
public static void rotate(List<?> list,int distance):集合中的元素向后移动distance个位置
public static void swap(List<?> list,int i,int j):交换集合中指定位置的元素
public static <T> void copy(List<? super T> dest,List<? extends T> src):将集合src复制到dest中(dest>src)
-
Comparable和Comparator 区别:
-
相同点:两者都是对象之间的比较,都可以自定义比较规则
-
两者都返回一个描述对象之间关系的int
-
不同点:comparable 在java.lang包下,comparator在java.util包下;
-
实现comparable 必须重写compareTo(T o),实现comparator必须重写compare(T o1,T o2);o1要添加的元素,o2代表原来元素
-
Comparator与Comparable同时存在的情况下,比较器Comparator优先级高。
-
使用Comparable需要修改原先的实体类,是属于一种自然排序,而Comparator 是不用修改原先的类的实现一个新的比较器 。
-
remove删除元素可以按索引也可以按元素删除
-
list.remove(2);//默认索引 list.remove(new Integer(2));//元素
-
迭代器Iterator
-
- hasNext()---判断是否有下个元素
- next()---调出下一个元素
- remove()---移除迭代器中的元素
-
集合与数组相互转化
-
//集合--->数组 Colloction<E> coll = new ArrayList<>(); Object[] obj = coll.toArray(); //数组--->集合 List<String> list = Arrays.asList(new String[]{"xxx", "sss"});//[xxx, sss] List<Integer> arr = Arrays.asList(new Integer[]{123, 456});//[123, 456]
-
泛型通配符<?>-----任意的类型,
- ----向下限定:<=E; E或者E的子类
- -----向上限定: >=E; E或者E的父类
-
增强for:
-
for(外层集合 变量名1:外层元素){
for(内层集合 变量名2:内存元素){
//使用变量名2
}
-
}
-
for (ArrayList<String> str : peo) { for (String stu : str) { System.out.println(stu); } }
-
-
静态导入
- import static 包名.包名.类名.方法名;
- 可以是import static 包名.包名.类名.*;
- 注意:方法必须为静态方法,导入的静态方法不能和Object里面的一样
-
可变参数
- 修饰符 返回值类型 方法名(数据类型… 变量名){}
- 注意:多个形参,可变参数必须放最后
Map接口(双列集合):
-
HashMap:非同步,允许空值和空键,唯一
- LinkedHashMap:存取有序且唯一
-
TreeMap:基于红黑树,元素有序且唯一,默认自然排序,可通过有参重写comparator排序对键排序且不同步
-
HashTable:同步且不允许空值和空键,其他和HashMap基本一样
-
V put(K key,V value):给map集合中添加键(key)和值(value),并返回以前与key关联的值,如果没有,则返回null;键相同则将值替代,返回旧值
-
public Set
KeySet():返回键的集合 -
public Collection
values():返回值的集合 -
public boolean isEmpty():判断集合是否为空
-
public V remove(Object key):移除键位所对应的值
-
public V get(Object key):通过指定键位找值
-
public boolean containsKey(Object key):判断集合中是否包含给定的键
-
public boolean containsValue(Object value):判断集合中是否包含给定的值
-
public void clear():清空集合
-
map集合的遍历:
-
1.获取所有的键的集合,遍历集合通过键找值
-
Set<Integer> keySet = map.keySet(); for (Integer key : keySet) { String value = map.get(key); System.out.println(key+"--"+value); }
-
2.获取键值对的集合,通过键值对对象获取键,或取值
Entry<K, V> 是Map接口中的内部接口
Map.Entry<K,V>
-
Set<Entry<Integer,String>> entrySet = map.entrySet(); for(Entry<Integer,String> entry: entrySet) { System.out.println(entry.getKey()+"--"+entry.getValue()); }
-
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!