类型 interface
方法:
int size() 集合长度 (注意与数组长度.lengh属性 和String长度 .lengh()方法区别)
boolean isEmpty() 判断集合是否为空
boolean contains(Object o) 判断集合中是否存在object类型的元素o
Iterator<E> iterator() 迭代器用法见后面集合的遍历
boolean add(E e) 向集合中增加元素
boolean remove(Object o) 删除集合中的元素
void clear() 删除集合中所有元素
-
基本数据类型的泛型集合,必须使用包装类
集合为空的判断
-
boolean isEmpty()为true
-
int size() 值为0
-
使用了void clear()
list
类型 interface extends collection
特点:
-
有序的
-
有下标
-
可重复
方法: E get(int index) 获取指定下标元素
E set(int index, E element) 改变指定元素下标的值
int indexOf(Object o)
int lastIndexOf(Object o)
细节
-
集合的删除 int类型 如果删除传入int类型,会默认为集合的下标 如果一定要删除int类型的值,那么必须使用封装类
-
集合指定位置添加,添加不能超出原来集合的最大长度
-
查找集合中的某个值indexOf,lastIndexOf 返回指定数据第一次被查找到在集合中的下标,如果没有找到返回-1
底层是数组的集合
ArrayList
ArrayList list =new Arraylist();
Vector
Vector vector=new Vector();
Stack
Stack stack=new Stack();
ArrayList Vector Stack 的特点和区别
-
都是继承了List接口,方法和实现基本一样,底层都是通过数组实现。
-
Stack 继承了 Vector ,两者都是线程安全的;ArrayList 没有考虑线程的问题。
-
ArrayList 有一些算法做了优化,速度更快,效率更高。
底层是链表的集合
类型 类 extends AbstractSequentialList extends AbstractList implements List
方法:
E getFirst() / E getLast()
E removeFirst() / E removeLast()
addFirst(E e) / addLast(E e)
LinkedList list=new LinkedList();
ArrayList 和 LinkedList区别
1.1ArrayList底层是数组的实现,LinkedList底层是链表的实现 1.2在java中链表就是自己实现了一个类,在类中记录了前一个和后一个的地址 每次查找都需要找到前一个或者后一个才能往前或者往后找到 2.ArrayList查找速度快,但是删除和插入的速度慢 3.LinkedList删除和插入的速度快,但是查询速度较慢 4.LinkedList有自己独有的addFirst addLast removeLast removeFirst的方法
集合的遍历
1.for循环遍历 (只能遍历数组为底层的集合)
for (int i = 0; i < list.size(); i++) {System.out.println(list.get(i)); }
2.通过迭代器打印
Iterator it = linkedList.iterator(); while(it.hasNext()) { Object obj = it.next(); System.out.println(obj); }
3.增强for循环(foreach循环)
for(Object obj : set) {System.out.println(obj); }
Set
类型 interface extends collection
特点 :
1.没有重复(不报错,后面的内容会覆盖前面的)
2.没有下标
3.无序的
HashSet
以Hash值判断元素是否重复
new 两个相同类型 相同内容的对象的对象在 HashSet中不相等
Student s1 = new Student(1,"张三","成都");Student s2 = new Student(1,"张三","成都");Set<Student> sets = new HashSet<>(); sets.add(s1); sets.add(s2);
这时会把两个对象都放入sets集合
要想令两个对象相等,只能在Student类中重写hashcode方法
TreeSet
可以排序的set
加入的对象必须(实体类)实现comparable 接口中的compare to方法(一个参数)
返回 正 零 负数
public int compareTo(Student o) { //注意,下面并不一定返回是1或者-1 //只要是正数或者负数就可以了 if(this.id > o.id) { return 1; } else if(this.id < o.id) { return -1; } else { return 0; }
集合的工具类
collections.sort();方法使用的两种方式
compareable 在 java.lang包下 实体类必须实现compareable
必须实现 在对象的实体类中compare to方法
comparator在java.util下 新建类必须实现comparator
必须实现compare方法
需要新建类或内部类来实现
import java.util.Comparator;public class StudentCompare implements Comparator<Student>{ @Overridepublic int compare(Student o1, Student o2) { if(o1 == null || o2 == null) { return 0; } return o1.getId() - o2.getId();}}
范式
< > 规定集合中的数据类型