Java集合(一)
1.Collection接口
数组元素既可以是基本类型的值也可以是对象(对象的引用变量);而集合里只能保存对象(对象的引用变量)。
Collection方法
boolean add(E e);
//添加元素
boolean remove(E e);
//移除元素
void cleat(E e);
//清空集合中元素
boolean contains(Object o);
//判断集合中是否包含指定元素
boolean containsAll(Collection c);
//判断集合中是否包含集合c中的全部元素
boolean isEmpty();
//判断集合是否为空
int size();
//集合中元素的个数
boolean retainALL(Collection c);
//只保留和集合c中有的元素
1.1Iterator
Iterator接口方法,可以通过Collection.iterator()方法得到实现类。
在遍历的过程中如果删除元素,会出现错误。原因是Iterator采用“快速失败机制”,一旦在迭代过程中检测到集合已经被修改,立即引发ConcurrentModificationException异常。
boolean hasNext();
//如果还有元素没有被遍历,返回true
Object next();
//返回下一个元素,如果有的话
void remove();
//删除上一次next()返回的元素
示例代码
package com.klaus.collection;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
public class Collect_1 {
public static void main(String[] args) {
Collection <String> c = new ArrayList<>();
c.add("Hello");
c.add("World");
c.add("!");
Iterator<String> i = c.iterator();
while (i.hasNext()){
System.out.print(i.next()+" ");
}
System.out.println("");
System.out.println("c.contains(\"Hello\"): "+c.contains("Hello"));
System.out.println("c.contains(\"Hell\"): "+c.contains("Hell"));
c.remove("Hello");
System.out.println("c.contains(\"Hello\"): "+c.contains("Hello"));
}
}
运行结果如下:
Hello World !
c.contains("Hello"): true
c.contains("Hell"): false
c.contains("Hello"): false
foreach访问更简洁
for (String s:c){
System.out.print(s+" ");
}
System.out.println("");
1.2 Set集合
无序、不重复。
Set和Collection相比没有提供任何额外的方法。使用也类似。
1.2.1 HashSet类
-
HashSet使用Hash算法来存储集合中的元素。
-
HashSet中元素顺序与添加顺序可能不一样。
-
hashCode()返回值是在HashSet中的索引。
添加元素时,HashSet会调用待添加对象的hashCode()方法得到对应的哈希值,然后由哈希值决定该对象在HashSet中的存储位置。
A.equals(B)返回true,则A.hashCode() == B.hashCode()。
特殊情况:
-
equals()比较返回true,但hashCode()不一样。
此时HashSet会把两个对象根据不同的哈希值存储到对应位置,但与Set不重复的原则矛盾。
-
hashCode()相同,但equals()比较返回false。
在同样的位置(由哈希值决定)通过链式结构把两个对象存储,但这样会导致性能下降。
1.2.2LinkedHasgSet类
本文来自博客园,作者:klaus08,转载请注明原文链接:https://www.cnblogs.com/klaus08/p/15105007.html

浙公网安备 33010602011771号