和我一起迎接明天的太阳吧

klaus08

焦虑源于行动的匮乏

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()。

特殊情况:

  1. equals()比较返回true,但hashCode()不一样。

    此时HashSet会把两个对象根据不同的哈希值存储到对应位置,但与Set不重复的原则矛盾。

  2. hashCode()相同,但equals()比较返回false。

    在同样的位置(由哈希值决定)通过链式结构把两个对象存储,但这样会导致性能下降。

1.2.2LinkedHasgSet类

posted @ 2021-07-09 14:29  klaus08  阅读(52)  评论(0)    收藏  举报