当前位置 博文首页 > @王某人:集合--Collection接口
? ? ? 在 Java 中为了方便用户操作各个数据结构,引入了类集的概念,有时候就可以把类集称为 java对数据结构的实现
? ? ? 类集中最大的几个操作接口:Collection、Map、Iterator,这三个接口是使用的最重点的接口。
? ? ? 所有的类集操作的接口或类都在 java.util 包中。
? ??
? ? ?Collection 接口是在整个 Java 类集中保存单值的最大操作父接口,里面每次操作的时候都只能保存一个对象的数据。
? ? ?定义:
? ? ? ? ? public interface Collection <E> extends Iterable <E>
? ? 方法:
?
? ? ? ?在开发中不会直接使用 Collection 接口。而使用其操作的子接口:List(允许重复)、Set(不允许重复)
?
? ? ?List 是 Collection 的子接口,里面的所有内容都是允许重复的。
? ? ?定义:
? ? ? ? ?public interface List <E> extends Collection <E>
? ? 方法:
?
?
常用的实现类有如下几个: · ArrayList(95%,线程不安全)、Vector(4%,线程安全)、LinkedList(1%)
?
?
? ? ArrayList 是 List 接口的子类,此类的定义如下:(使用数组结构)
? ? ? ?public class ArrayList <E> extends AbstractList <E> implements List <E>, RandomAccess,Cloneable, Serializable
? ? ? add(int index, E element)? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?将指定元素插入到指定位置中
? ? ? add()? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 将指定元素插入到末尾
? ? ? get()? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?返回指定位置的元素
? ? ? addAll?(int?index, Collection<? extends E>?c)? ? ? ? 将指定集合插入到指定位置
? ? ? addAll?(Collection<? extends E>?c)? ? ? ? ? ? ? ? ? ? ? ?将指定集合插入到末尾
? ? ? clear()? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 清除列表中所有的元素
? ? ? clone()? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 返回ArrayList实例的浅表副本,([100, 300, 250, 400])
? ? ? contains(Object O) ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? ? ? ? ? ? ? ??判断列表中是否包含此元素
? ? ? ensureCapacity(int minCapacity) ? ? ? ? ? ? ? ? ? ?? 如果有必要,增加ArrayList实例的容量
? ? ? indexof(Object O)? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? ?返回指定元素在列表中第一次出现的索引,如没有返回-1
? ? ? lastIndexOf(Object o)? ? ? ? ? ? ? ? ? ? ? ? ?? ? ? ? ? ? ? ? ? ?v返回指定元素在列表中最后一次出现的位置,如没有返回-1
? ? ? isEmpty()? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? ? ? ? ? ? ? ? ? ? 判断列表中是否为空
? ? ? remove(int index)? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?根据指定下标删除元素
? ? ? remove(Object O)? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 根据指定元素删除第一个匹配项
? ? ? removeAll?(Collection<?>?c)? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?删除指定几个的所有元素
? ? ? removeIf?(Predicate<? super E>?filter) ? ? ? ? ? ? ? ? ? 删除指定条件的元素
? ? ? removeRange?(int?fromIndex, int?toIndex)? ? ? ? ? ? ? 删除指定范围的元素
? ? ? retainAll?(Collection<?>?c) ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?仅保列表中包含在指定集合中的元素
? ? ? set?(int?index, E?element)? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?将指定下标替换为指定元素
? ? ? size()? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?返回列表的元素数
? ? ? subList?(int?fromIndex, int?toIndex)? ? ? ? ? ? ? ? ? ? ? ?返回指定范围的视图
? ? ? toArray()? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 返回数组
? ? ? toArray?(T[ ]?a)? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 返回包含此列表中所有元素的数组(
? ? ? trimToSize() ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 将ArrayList实例的大小调整为当前列表的大小
?
?
? ? 定义:使用数组结构,增删慢查找快
? ? ? ? ?public class Vector extends AbstractList implements List, RandomAccess, Cloneable,Serializable
? ?方法:同ArraList一样,只不过多了关于增量的内容
? ? ? ? ?Vector?(int?initialCapacity, int?capacityIncrement) 初始长度,以及增量
? ? ?使用双向链表结构,增删快,查找慢,可以看为栈和队列
? ? ? public class LinkedList extends AbstractSequentialList implements List, Deque, Cloneable,Serializable
? ? ? ? 基本比前两个相同,它提供了几个特殊方法
? ? ? ? ? ? ? ? ? addFirst(E e)? ? ? ? 在列表开头插入元素
? ? ? ? ? ? ? ? ? addLast(E e)? ? ? ? 在列表末尾插入元素
? ? ? ? ? ? ? ? ? removeFirst()? 删除并返回列表第一个元素
? ? ? ? ? ? ? ? ? removeLast()? 删除并返回列表最后一个元素
? ? ? ? ? ? ? ? ? push(E e) 压栈
? ? ? ? ? ? ? ? ? pop() 弹栈
? ? ? ? ? ? ? ? ? getFirst()? ? ? 获得第一个元素
? ? ? ? ? ? ? ? ? getLast()? ? ? ? ? ?获得最后一个元素
? ?Iterator 迭代器,获取列表中每个元素
? ? ? ? ? ? ? ? ? hasNext()? ? ? 是否有下一个
? ? ? ? ? ? ? ? ? next()? ? ? ? ? ? ?指针下移
? ? ? ? ? ? ? ? ? remove()? 删除元素
? ? 除上面方法还有
? ? ? ? ?previous() 指针上移
? ? ? ? ?set(E e) 将当前指针指向元素替换为指定元素
?
ArrayList<Integer> x = new ArrayList<>();
Iterator<Integer> iterator = x.iterator();
while (iterator.hasNext()){
int y = iterator.next();
System.out.println(y);
}
? ? ? ?增强for循环,用于迭代数组或集合
? ? ? ? 语法:
? ? ? ? ? ?for(数据类型 变量名:集合或名称){}
?
? ? ? ? 不包含重复元素的集合,方法基本上还是与 Collection接口相同
? ? ? ? 如果想输出其中元素,则使用iterator方法迭代或者使用toArray方法转成数组
? ? ? ? ? 散列存放的存储方式(哈希表)(内置HashMap)
? ? ? ? ? 无法保证顺序是存储顺序
? ? ? ? ?方法:没什么特殊的方法
? ? ? ? ? ?采用有序的二叉树存储(基于TreeMap)
? ? ? ? ? 基本类型可以进行排序
? ? ? ? ? 如果要想对自定义类型(对象)进行排序,则必须在 Person 类中实现 Comparable 接口。
? ? ? ?? ?重写toCompare()方法 放回负数,this小,返回正数,this大
? ? ? ? ? 方法:都也差不多
?
?
?
?
?
?
cs