常见数据结构:栈(stack)、队列(queue)、数组(Array)、链表(linked list)、红黑树(binary tree)
Collection 接口:单列集合
抽象方法:
boolean add(E e) | 向集合中添加一个元素,如果集合对象被添加操作改变了,则返回 true。E 是元素的数据类型 |
boolean addAll(Collection c) | 向集合中添加集合 c 中的所有元素,如果集合对象被添加操作改变了,则返回 true。 |
void clear() | 清除集合中的所有元素,将集合长度变为 0。 |
boolean contains(Object o) | 判断集合中是否存在指定元素 |
boolean containsAll(Collection c) | 判断集合中是否包含集合 c 中的所有元素 |
boolean isEmpty() | 判断集合是否为空 |
Iterator<E>iterator() | 返回一个 Iterator 对象,用于遍历集合中的元素 |
boolean remove(Object o) | 从集合中删除一个指定元素,当集合中包含了一个或多个元素 o 时,该方法只删除第一个符合条件的元素,该方法将返回 true。 |
boolean removeAll(Collection c) | 从集合中删除所有在集合 c 中出现的元素(相当于把调用该方法的集合减去集合 c)。如果该操作改变了调用该方法的集合,则该方法返回 true。 |
boolean retainAll(Collection c) | 从集合中删除集合 c 里不包含的元素(相当于把调用该方法的集合变成该集合和集合 c 的交集),如果该操作改变了调用该方法的集合,则该方法返回 true。 |
int size() | 返回集合中元素的个数 |
Object[] toArray() | 把集合转换为一个数组,所有的集合元素变成对应的数组元素。 |
List 接口:
方法:
方法名称 | 说明 |
---|---|
E get(int index) | 获取此集合中指定索引位置的元素,E 为集合中元素的数据类型 |
int index(Object o) | 返回此集合中第一次出现指定元素的索引,如果此集合不包含该元 素,则返回 -1 |
int lastIndexOf(Object o) | 返回此集合中最后一次出现指定元素的索引,如果此集合不包含该 元素,则返回 -1 |
E set(int index, Eelement) | 将此集合中指定索引位置的元素修改为 element 参数指定的对象。 此方法返回此集合中指定索引位置的原元素 |
List<E> subList(int fromlndex, int tolndex) | 返回一个新的集合,新集合中包含 fromlndex 和 tolndex 索引之间 的所有元素。包含 fromlndex 处的元素,不包含 tolndex 索引处的 元素 |
ArrayList 类:
采用数组结构,查找快,增删慢
方法:Collection 、List 所有方法
无参:创建长度10的空列表,如果列表元素比较多,每次扩容浪费内存。最好用一参构造指定长度
一参:new ArrayList(100);
Vector 类:
线程安全的List,1.2以后java添加了List
LinkedList 类:
采用链表结构,增删快,查找慢(没有下标)
方法:Collection 、List 所有方法,新增以下(对首尾操作)
方法名称 | 说明 |
---|---|
void addFirst(E e) | 将指定元素添加到此集合的开头 |
void addLast(E e) | 将指定元素添加到此集合的末尾 |
E getFirst() | 返回此集合的第一个元素 |
E getLast() | 返回此集合的最后一个元素 |
E removeFirst() | 删除此集合中的第一个元素 |
E removeLast() | 删除此集合中的最后一个元素 |
data.push(100); //压栈
Integer i = data.pup(); //弹栈
迭代器: Iterator 和 ListIterator
用foreach遍历集合,它的底层还是Iterator!!!!
- boolean hasNext():如果被迭代的集合元素还没有被遍历完,则返回 true。
- Object next():返回集合里的下一个元素。指针后移一位。
- void remove():删除集合里上一次 next 方法返回的元素。
- void forEachRemaining(Consumer action):这是 Java 8 为 Iterator 新增的默认方法,该方法可使用 Lambda 表达式来遍历集合元素。
// 创建一个集合
Collection objs = new HashSet();
objs.add("C语言中文网Java教程");
objs.add("C语言中文网C语言教程");
objs.add("C语言中文网C++教程");
// 调用forEach()方法遍历集合
// 获取books集合对应的迭代器
Iterator it = objs.iterator();
while (it.hasNext()) {
// it.next()方法返回的数据类型是Object类型,因此需要强制类型转换
String obj = (String) it.next();
System.out.println(obj);
if (obj.equals("C语言中文网C语言教程")) {
// 从集合中删除上一次next()方法返回的元素
it.remove();
}
// 对book变量赋值,不会改变集合元素本身
obj = "C语言中文网Python语言教程";
}
System.out.println(objs);
遍历器和修改元素值的方法:
用foreach也不行,它底层也是Iterator ,只能用fori,然后用set(下标,值)去改
可以使用ListIterator!!!
ListIterator
变量和类型 | 方法 | 描述 |
---|---|---|
void | add(E e) | 将指定的元素插入列表(可选操作)。 |
boolean | hasNext() | 如果此列表迭代器在向前遍历列表时具有更多元素,则返回 |
boolean | hasPrevious() | 如果此列表迭代器在反向遍历列表时具有更多元素,则返回 |
E | next() | 返回列表中的下一个元素并前进光标位置。 |
int | nextIndex() | 返回后续调用 |
E | previous() | 返回列表中的上一个元素并向后移动光标位置。 |
int | previousIndex() | 返回后续调用 |
void | remove() | 从列表中删除 |
void | set(E e) | 用指定的元素替换 |
foreach 增强 for
底层用的是Iterator
set 接口
没有下标,没有重复元素
方法:继承collection的方法
因为没有下标,所以没有get方法,可通过Iterator迭代器或toArray方法,获取元素
HashSet 集合
散列存储,无序