Java集合(List Set Map) 超全详解

本文阅读 4 分钟
首页 代码,Java 正文

概述

先来一张Java中的集合框架图 img 由上图可知,Java集合框架包含三大块内容:对外的接口、接口的实现、对集合运算的算法。总结成一个表格:

List接口

List接口有两个实现,分别是:

ArrayList

特点:

存储方式与数组相同,允许重复、有序,但是数组的长度不可变,ArrayList集合长度可以改变,默认大小是10。优点:遍历元素和随机访问元素的效率比较高。

存储方式示意图:

常用方法

LinkedList

特点:

采用链表存储方式。优点:插入、删除元素时效率较高。

存储方式示意图:

img LinkedList集合中的每个元素是通过地址互相连接,比如:第2个元素的地址就在第一个数据中存储着,方便找到,惊醒插入、删除。

常用方法

Map接口

HashMap集合

特点:

存储一组成对的键-值对象,可供key(键)到value(值)的映射。优点:查询指定元素效率高。

常用方法

迭代器Iterator

所有集合接口和类都没有提供相应的遍历方法,而是把遍历交给迭代器Iterator完成。Iterator为集合而生,专门实现集合的遍历。Iterator有两个方法可以实现遍历: 1,boolean hasNext():判断是否存在另一个可访问的元素。 2,Object next():返回要访问的下一个元素。 来个小案例:

public abstract class Pet { 
    protected String name = "无名氏";
    protected int health = 100;
    protected int love = 0;
    public Pet(String name){ 
        this.name = name;
    }
    public String getName() { 
        return name;
    }
    public void setName(String name) { 
        this.name = name;
    }
    public int getHealth() { 
        return health;
    }
    public void setHealth(int health) { 
        this.health = health;
    }
    public int getLove() { 
        return love;
    }
    public void setLove(int love) { 
        this.love = love;
    }
    /** * 输出宠物信息 */
    public void print(){ 
        System.out.println("宠物的自白:\n我的名字叫"+this.name+",健康值是"+this.health+
                ",和主人的其密度是"+this.love+"。");
    }
    /** * 抽象方法eat(),负责宠物吃饭功能 */
    public abstract void eat();
}
public class Dog extends Pet{ 
    public String strain;//品种
    public Dog(String name,String strain){ 
        super(name);
        this.strain = strain;
    }
    /** * 重写父类的print方法 */
    public void print(){ 
        super.print();
        System.out.println("我是一只:"+this.strain+"。");
    }
    /** * 实现狗狗吃饭的方法 */
    public void eat(){ 
        super.health +=3;
        System.out.println("狗狗"+super.name+"吃饱了,健康值增加3。");
    }
    /** * 实现飞盘功能 */
    public void catchingFlyDisc(){ 
        System.out.println("狗狗"+super.name+"正在接飞盘");
        super.health+=10;
        super.love+=5;
    }
}
public class Test5 { 

    /** * @param args */
    public static void main(String[] args) { 
        // TODO Auto-generated method stub
        //创建4个狗狗对象
        Dog ououDog = new Dog("偶偶", "雪瑞纳1");
        Dog yayaDog = new Dog("丫丫", "雪瑞纳2");
        Dog meimeiDog = new Dog("美美", "雪瑞纳3");
        Dog feifeiDog = new Dog("菲菲", "雪瑞纳4");
        //创建Map集合对象并把多个狗狗对象放入其中
        Map dog = new HashMap();
        dog.put(ououDog.getName(), ououDog);
        dog.put(yayaDog.getName(), yayaDog);
        dog.put(meimeiDog.getName(), meimeiDog);
        dog.put(feifeiDog.getName(), feifeiDog);
        //通过迭代器依次输入集合中所有狗狗的信息
        Set keys = dog.keySet();//拿到集合中所有key的集合
        Iterator iterator = keys.iterator();//获取Iterator对象
        while (iterator.hasNext()) { //判断是否存在可访问的元素
            String keyString = (String)iterator.next();//拿到迭代器中的key值
            Dog dog2 = (Dog)dog.get(keyString);//根据key取出对应的值
            System.out.println(keyString+"\t"+dog2.strain);
            
        }
    }

}

运行结果是: <font size="3"> 丫丫   雪瑞纳2 偶偶   雪瑞纳1 菲菲   雪瑞纳4 美美   雪瑞纳3 </font>

Set接口

HashSet集合

特点:

优点:HashSet具有去重功能。

public class Demo01 { 
    /** * Set集合 特点: 无序(没有下标)、集合中的元素不重复 hashset具有去重功能 */
    public static void main(String[] args) { 
        // 创建一个hashset 保存 f f a a b b d d
        HashSet<String> set = new HashSet<>();
        set.add("f");
        set.add("f");
        set.add("a");
        set.add("a");
        set.add("b");
        set.add("b");
        set.add("d");
        set.add("d");
        // 增强for循环
        for (String string : set) { 
            System.out.println(string);// 打印结果 a b d f ,去重且无序(不是按照输出顺序打印)
        }
    }
}
a
b
d
f

集合和数组的区别

1.数组可以存储基本数据类型和对象,而集合中只能存储对象(可以以包装类形式存储基本数据类型)。 2. 数组长度固定,集合长度可以动态改变 3. 定义数组时必须指定数组元素类型,集合默认其中所有元素都是Object。 4. 不能直接获取数组中实际存储元素的个数,length用来获取数组的长度。集合可以通过size()获取集合中实际存储的元素个数。 5. 集合以借口和类的形式存在,就有封装、继承、多态等类的特性。

本文为互联网自动采集或经作者授权后发布,本文观点不代表立场,若侵权下架请联系我们删帖处理!文章出自:https://blog.csdn.net/qq_46540738/article/details/112724899
-- 展开阅读全文 --
安全面试之XSS(跨站脚本攻击)
« 上一篇 07-24

发表评论

成为第一个评论的人

热门文章

标签TAG

最近回复