集合只能存储引用数据类型,如果要存基本数据类型,需要存对应的包装类
char——Character
int——Integer
一 Collection(接口)常用方法
1 add(E e)
2 addAll(Collection<? extends E> c) 将指定集合中的所有元素添加到此集合(可选操作)。
3 remove(E e)
4 removeIf(Object o) 删除满足条件的此集合中的元素
5 removeAll(Collection<?> c) 删除指定集合中包含的所有此集合的元素(可选操作)。
6 contains(E e)
7 containsAll(Collection<?> c) 如果此集合包含指定集合中的所有元素
8 isEmpty() 判断集合是否为空
9 clear() 清空集合所有元素
10 size() 获取集合的长度
11 toArray(T[] a) 返回一个包含此集合中所有元素的数组;
二 迭代器的使用
1 创建Collection对象(多态:用子类创建父类)
Collectio c = new Array List();
c.add(123) //这里的123是Integer类型 自动装箱
2 迭代器遍历Collection集合
(1) 通过集合对象获取迭代器对象
(2) 用hashNext()方法循环判断迭代器对象中是否还有元素
(3) 如果有元素,通过next()方法获取迭代器中的元素
Iterator iterator = c.iterator();
while(iterator.hasNext()){
Object object = iterator.next();
System.out.println(object);
}
3 迭代器删除方法(不理解)
remove(); 删除迭代器对象当前指向的元素
4 增强for遍历
for(数组/集合中元素的数据类型 变量名:数组/集合对象){
循环体
}
5 三种遍历方式使用场景
(1)增强for
(2)普通for:遍历过程中要增删元素、或操作索引时使用
(3)迭代器:遍历过程中删除元素时使用
三 List集合(可重复)
1 List集合特点:
list也称线性表,有序列表
(1)List集合及其实现类都是有索引的
(2)可以存储重复元素
(3)元素存取有序(存和取得顺序一致)
2 List集合特有得方法(增删改查)
(1) add(int index,E e)向集合中指定索引位置添加元素
(2) remove(int index)删除指定索引处的元素,并返回
(3) set(int index, E e)修改指定索引处的元素,返回被修改的元素
(4) get(int index)获取指定索引处的元素
(5) indexOf(Object o)返回此列表中指定元素第一次出现的索引,若此列表不包含此元素,返回-1
3 常用的实现List接口的类:
ArrayList:类似数组,线程不安全,查询速度快
LinkedList:双向链表结构(大手牵小手)增删速度快
Vector:矢量,线程安全,但速度慢。
Stack:堆栈(LIFO)
4 ArrayList实现类
(1)ArrayList对象,是长度可变的对象引用数组。
- ArrayList默认容量是10.当要保存的新元素所需的容量不足时,触发扩容 规则,基本规则为扩容1.5倍
(2)ArrayList底层采用数组实现,拥有快速随机访问能力
(3)ArrayList支持列化功能,支持克隆功能、排序功能等。
(4)ArrayList是非同步的。
5 LinkedList实现类
(1)LinkedList的实现机制与ArrayList的实现机制完全不同
- ArrayList内部以数组的形式保存集合的元素
所以随机访问集合元素有较好的性能; - LinkedList内部以链表的形式保存集合的元素
所以随机访问集合中的元素性能较差,但在插入删除元素时有较好的性能
(2)特有功能
①addFirst(E e)向集合中第一个位置添加元素
addLast(E e)
②getFirst()获取集合中第一个元素
getLast()
③removeFirst()删除集合中第一个元素
④pop() 栈顶元素出栈(往出弹最后一个)
⑤push(E e) 元素e入栈(从末尾往进加人)
(3)LinkedList实现了两个接口:
- List接口中定义了线性表操作方法
- Deque接口定义了线性数列从队列两端访问元素的方法
(4)LinkedList对象(链表对象)既可以表示线性序列表,也可以把它当做堆栈使用,还可以把它当作队列使用
四 Set集合
1 set集合特点
(1)不能存储重复元素(去重)
(2)没有索引(不能用普通for)
(3)存取无序
2 哈希值:是JDK根据对象的地址或者字符串或者数字计算出来的int类型的数值
hashCode() 返回对象的哈希码值
注:由于String类重写了父类的hashCode()方法。所以如果对象的内容一样,那么哈希值一样
**但**哈希值一样,内容不一定一样
3 HashSet集合
HashSet集合保证元素唯一性必须 重写hashCode()和equals()方法
4 TreeSet集合
(1)特点:
元素按照一定的规则进行排序,具体排序方式取决于构造方法
-
TreeSet()根据元素的自然顺序进行排序
- 自然排序:数字0-9,字母a-z,数字排在字母前
- TreeSet(Comparator< ?super E >comparator):根据指定的比较器进行排序
(2)比较器:
Comparab——自然排序器
让元素所属的类实现Comparable接口,重写comparaTo(T o1 ,T o2)方法,注意排序规则
- 0:两个对象相同
- 正数:升序(存取顺序一致)
- 负数:降序(存取顺序不一致)
Comparator——选择排序器
让元素所属的类实现Comparator接口,重写compara(T o1 ,T o2)方法,注意排序规则
- o1-o2:升序
- o2-o1:降序
5 使用匿名对象进行存档:无对象名称,只能使用一次
set.add(new Student("张三",23));
四 Collections工具类
1 常用方法
(1)addAll(Collection c,E e) 将指定元素添加到指定集合中
(2)max(Collection c)返回集合中最大的元素
(3)shuffle(List lilst)打乱集合中元素的顺序
(4)sort(List list,Comparator c)根据指定比较器对指定列表进行排序
2 批量添加元素到指定集合
(1)Collections.addAll(list,1,2,3,4);
(2)Integer[] arr={1,2,3,4}
Collections.addAll(list,arr);
(3)List<Integer> list1 = List.of(1,2,3,4)
//jdk9及以上的新特性
(4)List集合、Set集合下都有
addAll(Collection c) 将一个集合中的所有元素添加到另一个集合中(合并)
不去重 list.addAll(set);
去重 set.addAll(list);
标签:ArrayList,元素,List,指定,接口,Collection,集合 From: https://www.cnblogs.com/Sco-/p/16990050.html