查询效率高,增删效率低
查询效率低(必须从头找),增删效率高
单例集合的顶层接口,无直接实现
多态:利用ArrayList
Collection<String> c = new ArrayList<String>();
add()
:添加元素boolean add(E e) // 永远返回true,重写了`toString()`方法
remove()
:移除元素boolean remove(Object o)
clear()
:清空集合void clear()
contains()
:判断是否存在boolean contains(Object o)
isEmpty()
:判空boolean isEmpty()
int size()
A/t + 7
:查看结构框架
Iterator:迭代器用于集合遍历
Iterator
:返回集合元素的迭代器
迭代器依赖于集合存在
1. `E next()`:返回迭代器下一元素
2. `boolean hasNext()`:是否存在下一元素
while(it.hasNext()){
String s = it.next();
sout(s);
}
List:有序集合,可以控制每个元素的插入位置,可以索引访问元素
//定义
void add(int index, E e)
//定义
E remove(int index) //返回老元素
//定义
E set(int index, E e) //返回老元素
//定义
E get(int index) //返回老元素
ListIterator:列表迭代器,是List集合特有的
1. 可以任意方向遍历
2. 可以迭代时修改集合
1. `E previous()`:返回迭代器上一元素
2. `boolean hasPrevious()`:是否存在上一元素
3. `void add(E e)`:插入指定元素
List<String> list = new ArrayList<String>();
ListIterator<String> it = list.listiterator();
while(it.hasNext()){
String s = it.next();
if(s.equals("world")){
it.add("javaee");
}
}
数组实现:查询快,增删慢
链表实现:查询慢,增删快
1. `void addFirst()`
2. `void addLast()`
3. `E getFirst()`
4. `E getLast()`
5. `E removeFirst()`
6. `E removeLast()`
遍历时修改了集合元素长度
List<String> list = new ArrayList<String>();
Iterator<String> it = list.iterator();
while(it.hasNext()){
String s = it.next();
if(s.equals("world")){
list.add("javaee");
}
}
List<String> list = new ArrayList<String>();
for(int i = 0; i < list.size(); i++){
String s = list.get(i);
if(s.equals("world")){
list.add("javaee");
}
}
List<String> list = new ArrayList<String>();
ListIterator<String> it = list.listiterator();
while(it.hasNext()){
String s = it.next();
if(s.equals("world")){
it.add("javaee");
}
}
增强for循环:简化数组和Collection集合的遍历
for(元素数据类型 变量名 : 数组/Collection集合){
//变量就是元素
}
//示例
int[] arr = {1,2,3,4,5};
for(int i : arr){
sout(i);
}
1. 根据对象的地址/字符串/数字算出来的int类型的数值
2. `public int hashCode`
1. 返回对象的哈希值
2. Object类
1. 底层为哈希表(HashMap)
2. 迭代顺序无保障
3. 没有索引,不能用不同for循环遍历
4. Set集合没有重复元素 --> **需要重写对象的hashCode与equal方法**
TreeSet()
TreeSet(Comparator comparator)
自然排序 --> 重写compareTo方法
@Override
public int compareTo(Stu s){
return this.age - s.age == 0 ? this.name.compareTo(s.name) : this.age - s.age;
}
比较器排序 --> 匿名内部类
TreeSet<Stu> ts = new TreeSet<>(new Comparator<Stu>(){
@Override
public int compare(Stu s1, Stu s2){
return s1.getAge() - s2.getAge() == 0 ? s1.getName().compareTo(s2.getName()) : s1.getAge() - s2.getAge();
}
});
修饰符 class 类名<类型>{...}
修饰符 <类型> 返回值类型 方法名(类型 变量名){...}
修饰符 interface 接口名<类型>{...}
>
extends 类型>
super 类型>
修饰符 返回值类型 方法名(数据类型...变量名){}
public static int sum(int...a){
int sum = 0;
for(int i : a){
sum += i;
}
return sum;
}
// 定义
public static <T> List<T> asList(T...a)
// 使用
List<String> list = Arrays.asList("wc","wmh");
返回有指定数组支持的固定大小的列表 --> 不能增删可以改
// 定义
public static <E> List<E> of(E...elements)
// 使用
List<String> list = List.of("wc","wmh");
返回包含任意数量元素的不可变列表 --> 不能增删改
// 定义
public static <E> Set<E> of(E...elements)
// 使用
Set<String> s = Set.of("wc","wmh");
返回一个包含任意数量元素的不可变集合 --> 不能增删改
Interface Map
K:键 V:值
将key映射到value的对象
key不可以重复 && 每个key只对应一个value
多态
添加元素:V put(K key, V value)
删除:V remove(Object key)
清空:void clear()
判键存在:boolean containsKey(Object key)
判值存在:boolean containsValue(Object key)
判空:boolean isEmpty()
集合长度:int size()
Map的获取方法
根据键获取值
```java
// 定义
V get(Object key)
// 使用
Map map = new Map<>();
map.put("1","wmh");
sout(map.get("1"));
```
```java
// 定义
Set keySet()
// 使用
Set keySet = map.keySet();
for(String key : keySet){
sout(key);
}
```
```java
// 定义
Collection values()
// 使用
Collection values = map.values();
for(String value : values){
sout(value);
}
```
```java
// 定义
Set> entrySet()
// 使用
Set> entrySet = map.entrySet();
for(Map.Entry me : entrySet){
sout(me.getKey() + "," + me.getValue());
}
```
// 方式1
Set<String> keySet = map.keySet();
for(String key : keySet){
sout(key + "," + map.get(key));
}
// 方式2
Set<Map.Entry<String,String>> entrySet = map.entrySet();
for(Map.Entry<String,String> me : entrySet){
sout(me.getKey() + "," + me.getValue());
}
常用方法(类要重写compareTo
方法)
// 定义
public static <T extends Comparable<? superT>> void sort(List<T> list)
// 使用:普通集合
Collections.sort(list);
// 使用:类的集合 --> 比较器排序 --> 匿名内部类/类内重写
ArrayList<Stu> array = new ArrayList<>();
Collections.sort(array, new Comparator<Stu>(){
@Override
public int compare(Stu s1, Stu s2){
return s1.getAge() - s2.getAge() == 0 ? s1.getName().compareTo(s2.getName()) : s1.getAge() - s2.getAge();
}
});
// 定义
public static void reverse(List<?> list)
// 使用
Collections.reverse(list);
// 定义
public static void reverse(List<?> list)
// 使用
Collections.reverse(list);