文章目录
一.集合
1.体系结构
二.List接口
继承Collecting接口,允许出现重复元素,元素存入顺序和取出顺序一致
1.ArrayList
基于数组实现的类,动态增减数组的大小
//默认存储object对象,任何元素都可存放(null,boolean....)
ArrayList<Object> arrayList = new ArrayList<>();
-
常用方法:
void add(int index, Object element): 在指定位置index上添加元素element boolean addAll(int index, Collection c): 将集合c的所有元素添加到指定位置index Object get(int index): 返回List中指定位置的元素 int indexOf(Object o): 返回第一个出现元素o的位置,否则返回-1 int lastIndexOf(Object o) : 返回最后一个出现元素o的位置,否则返回-1 Object remove(int index) 删除指定位置上的元素 Object set(int index, Object element) 用元素element取代位置index上的元素,并且返回旧的元素 -
扩容
创建大的新数组,将原所有元素赋值进去
2.LinkedList
基于链表实现的类
3.Vector
4.泛型generics
编译时数据类型的安全检测机制,数据类型被指定为一个参数,数据类型要一致;
TreeSet<Integer> treeSet = new TreeSet<>();//数据类型Integer,传递参数类型一致为Integer
treeSet.add(1);
treeSet.add(5);
treeSet.add(2);
treeSet.add(4);
treeSet.add(5);
treeSet.add("aa");//报错:ClassCastException
5.迭代器Iterator
一个对象,可遍历对象
Iterator<Employee> iterator = list.iterator();
while (iterator.hasNext()) {//判断元素是否存在
System.out.println(iterator.next());//存在则输出所有Employee对象
}
三.LinkedList接口
1.定义:
双向链表结构,方便插入和删除元素,不支持快速访问
2.特点:
2.常用方法
方法 | 说明 |
---|---|
public void addFirst(E e) | 将指定元素插入集合的开头 |
public void addLast(E e) | 将指定元素插入集合的结尾 |
public E getFirst() | 返回集合第一个元素 |
public E getLast() | 返回集合最后一个元素 |
public E removeFirst() | 移除并返回集合的第一个元素 |
public E removeLast() | 移除并返回最后一个元素 |
public E pop() | 从集合所表示的堆栈中弹出一个元素 |
public void push(E e) | 将元素推入集合所表示的堆栈中 |
public boolean isEmpty() | 判断集合是否为空 |
四.Vetor类
五.集合排序
1.Comparable
- 实体类实现Comparable接口
- 重写compareTo()方法
- Collections.sort()排序//默认升序
//实体类Employee实现`Comparable`接口
public class Employee implements Comparable{
............
@Override
public int compareTo(Employee o) {
return this.getAge() - o.getAge();
}
}
2.使用Comparator匿名内部类
public static void main(String[] args) {
ArrayList<Employee> list = new ArrayList<>();
list.add(new Employee("arran", 23,123));
list.add(new Employee("arran", 22,3243));
list.add(new Employee("arran", 22,3123));
list.add(new Employee("arran", 26,435));
// while (iterator.hasNext()) {
// System.out.println(iterator.next());
// }
// });
//匿名内部类
list.sort(new Comparator<Employee>() {
@Override
public int compare(Employee o1, Employee o2) {
return o1.getAge()-o2.getAge();
}
});
//迭代器遍历对象
Iterator<Employee> iterator = list.iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
}
-
倒序
//参数颠倒下位置 public int compare(Employee o1, Employee o2) { return o2.getAge()-o1.getAge(); }
3.使用List接口自带的sort()方法
// Collections.sort(list, new Comparator<Employee>() {
// @Override
// public int compare(Employee o1, Employee o2) {
// int result=o1.getAge()-o2.getAge();
// if (result==0) {
// result=(int)(o1.getSalary()-o2.getSalary());
// }
// return result;
// }
六.List的contains()方法去重
public static void main(String[] args) {
ArrayList<Object> list = new ArrayList<>();
list.add(11);
list.add(55);
list.add(33);
list.add(55);
list.add(44);
// System.out.println(list);
ArrayList<Object> objects1 = new ArrayList<>(list);
for (Object o : list) {//遍历对象数组list,如果不包含
if (!objects1.contains(o)) {
objects1.add(o);
}
}
三.Set接口
1.特征:
- 扩展Collection接口
- 不重复元素
- 无序
- 允许存储null元素,但是最多只能有一个(HashSet)
2.分类:
-
HashSet类
-
TreeSet类
-
LinkedHashSet类
一).HashSet类
1.方法:
类似List或ArrayList类
2.HashSet去重
public class Main {
public static void main(String[] args) {
List<Integer> list = new ArrayList<Integer>();
list.add(11);
list.add(22);
list.add(33);
list.add(11);
Set<Integer> hashSet = new HashSet<Integer>(list);
list = new ArrayList<Integer>(hashSet);
System.out.println(list);
}
}
二).TreeSet类
1.特点:
- 结构红黑树算法(树结构实现);
- 元素按顺序排列
- 方法类似LIst…,contains()
三).LinkedHashSet类
LinkedHashSet正好介于HashSet和TreeSet之间,它也是一个hash表,但它同时维护了一个双链表来记录插入的顺序
四.Map接口
一).定义
Map是将键"key"映射到值"value"的对象
1.Map集合的特点
- 双列集合,包含key和value;
- Map集合中的元素,key和value的数据类型可以相同,也可以不同
- key不允许重复,value可以重复;
- key和value是一一对应的。
2.分类
- HashMap类:
- TreeMap类:
- LinkedHashMap类:
3.常用方法:
方法 | 说明 |
---|---|
Object put(Object key, Object value) | 将互相关联的一组键/值对放入该映像 |
Object remove(Object key) | 从映像中删除与key相关的映射 |
void putAll(Map t) | 将来自特定映像的所有元素添加给该映像 |
void clear() | 从映像中删除所有映射 |
Object get(Object key) | 获得与关键字key相关的值 |
boolean containsKey(Object key) | 判断映像中是否存在关键字key |
boolean containsValue(Object value) | 判断映像中是否存在值value |
int size() | 返回当前映像中映射的数量 |
boolean isEmpty() | 判断映像是否为空 |
Set keySet() | 返回映像中所有关键字的视图集 |
Collection values() | 返回映像中所有值的视图集 |
Set entrySet() | 返回Map.Entry对象的视图集,即映像中的关键字/值对 |
二).HashMap实现类
使用类似ArrayList类
1.HashMap存储结构(扩展)----了解即可
2.底层结构—了解
三).TreeMap实现类
TreeMap<Object, Object> treeMap = new TreeMap<>();
treeMap.put("111","wefweg");
treeMap.put("333","fwef");//key不能为空null,输出NullPointerException
treeMap.put("444",null);//ClassCastException, key不允许重复
treeMap.put("222","wefweg");
treeMap.put("5555","wefweg");//参
System.out.println(treeMap);
//迭代方式1: 通过key获取value
Set<Object> keySet = treeMap.keySet();
for (Object o : keySet) {
System.out.println(o+":"+treeMap.get(o));
}
System.out.println("........................");
//迭代方式2: entrySet()获得key
Set<Map.Entry<Object, Object>> entries = treeMap.entrySet();
for (Map.Entry<Object, Object> entry : entries) {
System.out.println(entry.getKey()+":"+entry.getValue());
}
ect o : keySet) {
System.out.println(o+“:”+treeMap.get(o));
}
System.out.println(“…”);
//迭代方式2: entrySet()获得key
Set<Map.Entry<Object, Object>> entries = treeMap.entrySet();
for (Map.Entry<Object, Object> entry : entries) {
System.out.println(entry.getKey()+“:”+entry.getValue());
}