本文共 5987 字,大约阅读时间需要 19 分钟。
boolean add(Object e); // 向集合中添加元素void clear(); // 清空集合中所有元素boolean contains(Object o); // 判断集合中是否包含某个元素boolean isEmpty(); // 判断集合中的元素是否为空boolean remove(Object o); // 根据元素的内容来删除某个元素int size(); // 获取集合的长度Object[] toArray(); // 能够将集合转换成数组并把集合中的元素存储到数组中
java中提供了很多个集合,它们在存储元素时,采用的存储方式不同。我们要取出这些集合中的元素,可通过一种通用的获取方式来完成。
Collection集合元素的通用获取方式:在取元素之前先要判断集合中有没有元素,如果有,就把这个元素取出来,继续在判断,如果还有就再取出出来。一直把集合中的所有元素全部取出
。这种取出方式专业术语称为迭代。 集合中把这种取元素的方式描述在Iterator接口中。 Iterator 集合对象.iterator(); // 返回一个Iterator的对象hasNext(); // 判断集合中是否有元素可以迭代next(); // 用来返回迭代的下一个元素,并把指针向后移动一位
Exception in thread "main" java.util.ConcurrentModificationException:并发修改异常
这是因为在使用迭代器时,我们直接通过集合进行添加,而迭代器的原理其实就是一个集合的副本,当集合中的元素与迭代器中的元素个数或值不同时,就会发生并发修改异常,解决办法有两种,第一种不使用迭代器进行遍历,第二种使用迭代器的子类对象,如果要修改集合,直接通过迭代器去修改副本中的数据,修改之后,副本会同步集合中的数据这里的E可以替换为T或?,都表示泛型
增强for循环是JDK1.5以后出来的一个高级for循环,专门用来遍历数组和集合的。它的内部原理其实是个Iterator迭代器,所以在遍历的过程中,不能对集合中的元素进行增删操作
。
for(元素的数据类型 变量 : Collection集合or数组的对象){}
如果查询较多,则使用数组结构的集合 如果增删较多,则使用链表结构的集合
A:有序的(存储和读取的顺序是一致的)
B:有整数索引C:允许重复的
void add(int index, E element); // 将元素添加到index索引位置上E get(int index); // 根据index索引获取元素E remove(int index); // 根据index索引删除元素E set(int index, E element); // 将index索引位置的的元素设置为element
LinkedList底层使用的是链表结构,因此增删快,查询相对ArrayList较慢
void addFirst(E e); // 向链表的头部添加元素void addLast(E e); // 向链表的尾部添加元素E getFirst(); // 获取链头的元素,不删除元素E getLast(); // 获取链尾的元素,不删除元素E removeFirst(); // 返回链头的元素并删除链头的元素E removeLast(); // 返回链尾的元素并删除链尾的元素
A:存入集合的顺序和取出集合的顺序不一致
B:没有索引C:存入集合的元素没有重复
规则:新添加到HashSet集合的元素都会与集合中已有的元素一一比较 首先比较哈希值(每个元素都会调用hashCode()产生一个哈希值) 如果新添加的元素与集合中已有的元素的哈希值都不同,新添加的元素存入集合 如果新添加的元素与集合中已有的某个元素哈希值相同,此时还需要调用equals(Object obj)比较 如果equals(Object obj)方法返回true,说明新添加的元素与集合中已有的某个元素的属性值相同,那么新添加的元素不存入集合 如果equals(Object obj)方法返回false, 说明新添加的元素与集合中已有的元素的属性值都不同, 那么新添加的元素存入集合
下面这个例子很重要
public class Demo { public static void main(String[] args) { HashSethashSet = new HashSet (); Person p1 = new Person(12,"zhangsan"); Person p2 = new Person(12,"san"); Person p3 = new Person(13,"san"); hashSet.add(p1); System.out.println(""); hashSet.add(p2); System.out.println(""); hashSet.add(p3); System.out.println(""); for (Person person : hashSet) { System.out.println(person); } }}package com.bsw.hashsetDemo;public class Person { int age; String name; public Person(int age, String name) { super(); this.age = age; this.name = name; } @Override public String toString() { return "Person [age=" + age + ", name=" + name + "]"; } @Override public int hashCode() { return 1; } @Override public boolean equals(Object obj) { Person person = (Person)(obj); System.out.println(this.name + "---------------" + person.name); if (!name.equals(person.name)) { return false; } if (age != person.age) { return false; } return true; }}
这张图是上述案例输出的结果
static void swap(List list, int i, int j); // 将指定列表中的两个索引进行位置互换// 例子:Collections.swap(集合对象, 索引1, 索引2);static void sort(Listlist); // 按照列表中元素的自然顺序进行排序// 例子:Collections.sort(集合对象);static void shuffle(List list); // 是否,随机置换// 例子:Collections.shuffle(集合对象);static void reverse(List list); // 反转// 例子:Collections.reverse(集合对象);static void fill(List list, Object obj); // 使用指定的对象填充指定列表的所有元素// 例子:Collections.fill(集合对象, 指定的填充元素);static void copy(List dest, List src); // 是把源列表中的数据覆盖到目标列表// 例子:Collections.copy(目标集合对象, 源集合对象);这里需要注意,目标集合长度大于等于源集合对象static int binarySearch(List list, Object key); // 使用二分查找法查找指定元素在指定列表的索引位置 // 例子:Collections.binarySearch(集合对象, 指定索引);
面试题:Collection和Collections有什么区别? Collection是集合体系的最顶层,包含了集合体系的共性 Collections是一个工具类,方法都是用于操作Collection
一个键对应一个值,键不可重复,但是值可以重复
,可以理解为夫妻状态单列集合
,Map的集合称为多列集合
A:映射功能(添加): V put(K key, V value); // 以键=值的方式存入Map集合,如果key存在,则覆盖value,并将原来的value返回B:获取功能: V get(Object key); // 根据键获取值 int size(); // 返回Map中键值对的个数C:判断功能: boolean containsKey(Object key); // 判断Map集合中是否包含键为key的键值对 boolean containsValue(Object value); // 判断Map集合中是否包含值为value键值对 boolean isEmpty(); // 判断Map集合中是否没有任何键值对 D:删除功能: void clear(); // 清空Map集合中所有的键值对 V remove(Object key); // 根据键值删除Map中键值对E:遍历功能: Set> entrySet(); // 将每个键值对封装到一个个Entry对象中,再把所有Entry的对象封装到Set集合中返回 Set keySet(); // 将Map中所有的键装到Set集合中返回 Collection values(); // 返回集合中所有的value的值的集合