java集合框架和泛型

奉天承运,博主诏曰:

集合框架和泛型

基础知识

java集合框架和泛型
java集合框架和泛型
java集合框架和泛型

java集合框架图

java集合框架和泛型

ArrayList常用方法

java集合框架和泛型

ArrayList 代码演示

public class TestArrayList {
    public static void main(String[] args) {
        ArrayList news=new ArrayList();//声明并分配空间
        //元素增加
        news.add("疫情动态");
        news.add("春天来了");
        news.add("汪峰头条");
        news.add("拜登上台");
        //System.out.println(news);//重写了toString方法,直接打印就可以


        //三种遍历方式
        //for循环
        for (int i = 0; i <news.size() ; i++) {
            System.out.println(news.get(i));//获取对应下标,越界会抛异常
        }
        
        //增强for
        for(Object n:news){
            System.out.println(n);
        }
        //迭代器for
        Iterator iter=news.iterator();
        while ((iter.hasNext())){
            System.out.println(iter.next());//next()方法一次循环只能用一个
            Object obj=iter.next();//如果需要使用当前元素多次,则用变量接收
            System.out.println(obj);//多次调用时,直接使用接收的变量即可
            System.out.println(obj+"");
        }
        //删除,插入和修改
//        if(news.contains("疫情动态"))
//          news.remove("疫情动态");//移除对象
//        news.remove(1);//下标为1指定的是第二个插入的元素
        news.add(1,"abc");//指定下标插入,同时后面的元素后移
        news.set(1,"还有谁!");//指定下标修改元素
        System.out.println(news);
    }
}

LinkedList常用方法

java集合框架和泛型

LinkedList 代码演示

public class Node {//模拟链表的每一个节点
    public Object element;
    //下一个
    public Node next;
    //上一个,不定义上一个,是单向链表
    public Node prev;

    public static void main(String[] args) {
        Node n1=new Node();
        n1.element="我是第一个";
        Node n2=new Node();
        n2.element="我是第二个";
        n1.next=n2;
        Node n3=new Node();
        n3.element="我是第三个";
        n2.next=n3;
        n2.prev=n1;
        n3.prev=n2;
    }
}
public class TestLinkedList {
    public static void main(String[] args) {
        LinkedList list=new LinkedList();
        list.add("abc");
        list.add("def");
        list.add(123);
        System.out.println(list);
        list.addFirst("我就要当第一!");
        list.addLast("我是最后!");
        list.add(0,"我才是第一!");
        System.out.println(list);
        //在linkedList中使用下标吃力不讨好
    }
}

Set接口

java集合框架和泛型
java集合框架和泛型
java集合框架和泛型

HashSet 代码演示

public class TestHashSet {
    public static void main(String[] args) {
        HashSet set=new HashSet();
        set.add("abc");
        set.add(123);
        set.add("012");
        set.add(1);
        set.add(2);
        set.add("2");
        System.out.println(set);
    }
}

本章总结

集合类:Collection(无序,可重复)
List:有序(插入顺序),可重复的
ArrayList:以数组作为底层存储(add(Object o)),add(int index,Object o))
add()方法插入元素
1.先判断容量是否越界,则扩容
1)扩容后比数组最大长度大,则是int的最大值作为长度
还没达到数组最大长度,则就是数组的最大值
2)正常来说扩容1.5倍,如果扩容1.5倍还不够
则直接把长度赋值给数组新长度
3)如果是新数组,长度和为10比较,把大的赋值给数组
2.不需要扩容则直接插入

由于底层是数组,遍历方便,随机访问方便(使用下标),改动方便

LinkedList:以链表作为底层存储
链表:多个Node互相存储地址,以下一个Node地址存储
遍历很不方便,增加Node和删除Node会很快

Vector:ArrayList的线程安全版,在多线程的状况下使用
Set:不可重复(元素),无序的
HashSet:是以HashMap的Key值的hash码来进行存储(保证唯一,理论上)

钦此。

上一篇:JAVA中的策略模式


下一篇:总结练习