**Collectoin单列集合:**
Collection方法:
● boolean add(Object e) 把给定的对象添加到当前集合中
● void clear() 清空集合中所有的元素
● boolean remove(Object o) 把给定的对象在当前集合中删除
● boolean contains(Object o) 判断当前集合中是否包含给定的对象
● boolean isEmpty() 判断当前集合是否为空
● Iterator iterator() 迭代器,用来遍历集合中的元素的
● int size() 返回集合中元素的个数
● Object[] toArray() 把集合中的元素,存储到数组中
● Iterator : 迭代器
● Object next()返回迭代的下一个元素
● boolean hasNext()如果仍有元素可以迭代,则返回 true。
**List集合:**
1.特点:
①它是一个有序的集合(元素存与取顺序相同)
②它可以存储重复的元素
③有索引
2.List集合中的特有方法
void add(int index, Object element) 将指定的元素,添加到指定位置上
Object get(int index)返回集合中指定位置的元素。
Object remove(int index) 移除列表中指定位置的元素, 返回的是被移除的元素
Object set(int index, Object element)用指定元素替换集合中指定位置的元素
3.List的子类
①ArrayList:
底层数据结构是数组,查询快,增删慢
线程不安全,效率高
②LinkedList:
底层数据结构是链表,查询慢,增删快
线程不安全,效率高
**Set集合**
1.特点:
①它不能存储重复的元素
②没有索引
③HashsSet无序的集合(元素存与取的顺序可能不同)
LinkedHashsSet有序的集合(元素存与取的顺序相同)
2.Set子类
①HashSet:
元素唯一不能重复
底层结构是 哈希表结构
元素的存与取的顺序不能保证一致
②LinkedHashSet:
元素唯一不能重复
底层结构是 哈希表结构 + 链表结构
元素的存与取的顺序一致
3.Set集合存储元素不重复的原理:
hashCode值一样 , 元素内容不一样 , 还是会输出 .
hashCode值一样 , 元素内容一样 , 不会输出 .
存储的元素必须重写hashCode和equals方法,来保证元素唯一
String,Integer,Double...hashCode和equals方法
没有索引的遍历方式:
1.迭代器遍历:
ArrayList<String> list = new ArrayList<>(); //创建集合
Iterator<String> it = list.iterator(); //获取迭代器对象.
while(it.hasNext()){ // 判断是否仍有元素可以迭代
String str = it.next(); // 取出下一代元素.
System.out.println(str);
}
2.增强for循环
格式:创建一个数组或者集合.
for(数据类型 变量 : 数组 / Collection集合) {
// 输出变量.
}
hashCode和equals方法的两个问题:
两个对象 Person p1 = new Person(); p2= new Person();
问题1:
如果两个对象的哈希值相同 p1.hashCode() == p2.hashCode()
两个对象的equals一定会返回true吗? p1.equals(p2)一定是true吗
正确答案:不一定
问题2:如果两个对象的equals方法返回true, p1.equals(p2)=true
两个对象的哈希值一定相同吗?
正确答案:一定(常规协定) 该协定声明相等对象必须具有相等的哈希码。
注意:
迭代器和增强for只能遍历,不能删除或者修改元素.否则就会出现并发修改异常:ConcurrentModificationException .