ArrayList、LinkedList、HashSet、HashMap、Iterator

实线方块是实现类、  

虚线方块是虚拟类、

虚点方块是接口、

实线箭头是实现,虚线箭头是继承

一、ArrayList

ArrayList 类是一个可以动态修改的数组,与普通数组的区别就是它是没有固定大小的限制,我们可以添加或删除元素。

ArrayList 继承了 AbstractList ,并实现了 List 接口

import java.util.ArrayList;

public class arraylist {
    public static void main(String[] args) {
        ArrayList<String> s=new ArrayList<>();
        s.add("q");
        s.add("9");
        s.add("8");
        System.out.println(s);
        System.out.println(s.get(0));

        s.set(1,"1");
        System.out.println(s);

        s.remove(0);
        System.out.println(s);

        System.out.println(s.size());
        for (int i =0;i<s.size();i++){
            System.out.println(s.get(i));
        }

        for (String i:s) {
            System.out.println(i);

        }
    }
}

、链表(LinkedList)
链表可分为单向链表和双向链表。
一个单向链表:数值、下一个节点的链接
一个双向链表:数值、向后的节点链接、向前的节点链接

与 ArrayList 相比,LinkedList 的 新增和删除 对操作效率更高,而查找和修改的操作效率较低。

以下情况使用 ArrayList :
1、频繁访问列表中的某一个元素。
2、只需要在列表末尾进行添加和删除元素操作。

以下情况使用 LinkedList :
1、你需要通过循环迭代来访问列表中的某些元素。
2、需要频繁的在列表开头、中间、末尾等位置进行添加和删除元素操作

 三、HashSet

HashSet 基于 HashMap 来实现的,是一个不允许有重复元素的集合。
HashSet 允许有 null 值。
HashSet 是无序的,即不会记录插入的顺序。
HashSet 不是线程安全的, 如果多个线程尝试同时修改 HashSet,则最终结果是不确定的。 您必须在多线程访问时显式同步对 HashSet 的并发访问

import java.util.HashSet;

public class hashset {
    public static void main(String[] args) {
        HashSet<String> sites = new HashSet<String>();
        sites.add("Google");
        sites.add("Runoob");
        sites.add("Taobao");
        sites.add("Zhihu");
        sites.add("Runoob");  // 重复的元素不会被添加
        System.out.println(sites);
        System.out.println(sites.size());       // 计算大小
        System.out.println(sites.contains("Taobao")); // 判断元素是否存在

        for (String s : sites) {
            System.out.println("===" + s);  // 因为是无序的,所以打印出来的顺序并不是添加的顺序
        }

        sites.remove("Taobao");  // 删除元素,删除成功返回 true,否则为 false
        System.out.println(sites);

        sites.clear();
        System.out.println(sites);
    }
}

四、HashMap

HashMap 是一个散列表,它存储的内容是键值对(key-value)映射。
HashMap 实现了 Map 接口,根据键的 HashCode 值存储数据,具有很快的访问速度,最多允许一条记录的键为 null,不支持线程同步。
HashMap 是无序的,即不会记录插入的顺序。
HashMap 继承于AbstractMap,实现了 Map、Cloneable、java.io.Serializable 接口。

import java.util.HashMap;

public class 集合hashmap {
    public static void main(String[] args) {
        HashMap<Integer, String> Sites = new HashMap<Integer, String>();
        // 添加键值对
        Sites.put(1, "Google");
        Sites.put(2, "Runoob");
        Sites.put(3, "Taobao");
        Sites.put(4, "Zhihu");
        System.out.println(Sites);
        System.out.println(Sites.get(3));
        Sites.remove(4);
        System.out.println(Sites.size()); // 元素数量

        for (int i: Sites.keySet()){
            System.out.println(i+ Sites.get(i));
        }
        for (String s:Sites.values()) {
            System.out.println(s);
        }
    }
}

 五、Iterator

import java.util.ArrayList;
import java.util.LinkedList;

import java.util.Iterator;

public class 迭代器 {
    public static void main(String[] args) {

        // 创建集合
        LinkedList<String> sites = new LinkedList<String>();
        sites.add("Google");
        sites.add("Runoob");
        sites.add("Taobao");
        sites.add("Zhihu");

        // 获取迭代器
        Iterator<String> it = sites.iterator();

        // 输出集合中的所有元素
        while(it.hasNext()) {
            System.out.println(it.next());
        }
    }
}
测试进阶轨迹
原文地址:https://www.cnblogs.com/yinwenbin/p/14989856.html