Java集合框架

如果并不知道程序运行时会需要多少对象,或者需要 更复杂方式存储对象——可以使用Java集合框架

Java集合框架提供了一套性能优良、使用方便的接口和类,它们位于java.util包中
①接口
②具体类
③算法

Java集合框架包含的内容

1、Collections 提供了对集合进行排序、遍历等多种算法实现
2、Collection 接口存储一组不唯一,无序的对象
3、List 接口存储一组不唯一,有序(插入顺序)的对象
4、Set 接口存储一组唯一,无序的对象
5、Map接口存储一组键值对象,提供key到value的映射

List接口的实现类

1、ArrayList实现了长度可变的数组,在内存中分配连续的空间。遍历元素和随机访问元素的效率比较高
2、LinkedList采用链表存储方式。插入、删除元素时效率比较高

Dog类:

public class Dog {
    public String name;
    public String breed;
    public Dog(){
    }
    public Dog(String name,String breed){
        this.breed=breed;
        this.name=name;
    }
    public String getName(){
        return name;
    }
    public String getBreed(){
        return breed;
    }

}

ArrayList集合类

 //创建4个对象
        Dog ououDog=new Dog("欧欧","雪纳瑞");
        Dog yayaDog=new Dog("丫丫","拉布拉多");
        Dog meimeiDog=new Dog("美美","雪纳瑞");
        Dog feifeiDog=new Dog("菲菲","拉布拉多");
        //创建ArrayList集合对象把4个狗狗对象放入其中
        List dogs=new ArrayList();
        dogs.add(ououDog);
        dogs.add(yayaDog);
        dogs.add(meimeiDog);
        dogs.add(2,feifeiDog);//添加feifeidog到指定位置里

1、通过List接口的实现类ArrayList实现该需求
2、元素个数不确定
3、要求获得元素的实际个数
4、按照存储顺序获取并打印元素信息
5、使用List接口提供的remove()、contains()方法
6、使用ArrayList移除、判断元素

List接口常用方法

方法名 说 明
boolean add(Object o) 在列表的末尾顺序添加元素,起始索引位置从0开始
void add(int index,Object o) 在指定的索引位置添加元素。索引位置必须介于0和列表中元素个数之间
int size() 返回列表中的元素个数
Object get(int index) 返回指定索引位置处的元素。取出的元素是Object类型,使用前需要进行强制类型转换
boolean contains(Object o) 判断列表中是否存在指定元素
boolean remove(Object o) 从列表中删除元素
Object remove(int index) 从列表中删除指定位置元素,起始索引位置从0开始

插入、删除操作频繁时,可使用LinkedList来提高效率
LinkedList提供对头部和尾部元素进行添加和删除操作的方法
使用LinkedList存储元素

LinkedList的特殊方法

方法名 说 明
void addFirst(Object o) 在列表的首部添加元素
void addLast(Object o) 在列表的末尾添加元素
Object getFirst() 返回列表中的第一个元素
Object getLast() 返回列表中的最后一个元素
Object removeFirst() 删除并返回列表中的第一个元素
Object removeLast() 删除并返回列表中的最后一个元素

 //2、创建LinkedList集合对象并把多个狗狗对象放入其中
        LinkedList dogs=new LinkedList();
        dogs.add(ououDog);
        dogs.add(yayaDog);
        dogs.addLast(meimeiDog);
        dogs.addFirst(feifeiDog);//添加feifeidog到指定位置里
        //3、查看集合中第一条狗狗的昵称
        Dog dogsFirst=(Dog)dogs.getFirst();
        System.out.println("第一条狗狗的昵称是:"+dogsFirst.getName());
        //4、查看集合中第一条狗狗的昵称
        Dog dogsLast=(Dog)dogs.getLast();
        System.out.println("第一条狗狗的昵称是:"+dogsLast.getName());
        //5、删除集合中第一条狗狗和最后一条狗狗
        dogs.removeFirst();
        dogs.removeLast();

Map接口

Map接口专门处理键值映射数据的存储,可以根据键实现对值的操作
最常用的实现类是HashMap
使用HashMap存储元素

//1、使用HashMap存储多组国家英文简称和中文全称的”键-值对“
        Map countries=new HashMap();
        countries.put("CN","中华人民共和国");
        countries.put("RU","俄罗斯联邦");
        countries.put("FR","法兰西共和国");
        countries.put("US","美利坚众和国");
        //2、显示”CN“对应国家的中文全称
        String country=(String)countries.get("CN");
        System.out.println("CN对应的国家是:"+country);
        //3、显示集合中的元素
        System.out.println("Map中共有"+countries.size()+"组数据");
        //4、两次判断Map中是否存在”FR“键
        System.out.println("Map中含FR的Key吗?"+ countries.containsKey("FR"));
        countries.remove("FR");
        System.out.println("Map中含有FR的Key吗?"+ countries.containsKey("FR"));
        //5、分别显示键集、值集和键-值对集
        System.out.println(countries.keySet());
        System.out.println(countries.values());
        System.out.println(countries);
        //6、清空HashMap()并判断
        countries.clear();
        if(countries.isEmpty()){
            System.out.println("已经清空Map中的数据");
        }
    }

Map接口常用方法

方法名 说 明
Object put(Object key, Object val) 以“键-值对”的方式进行存储
Object get (Object key) 根据键返回相关联的值,如果不存在 指定的键,返回null
Object remove (Object key) 删除由指定的键映射的“键-值对”
int size() 返回元素个数
Set keySet () 返回键的集合
Collection values () 返回值的集合
boolean containsKey (Object key) 如果存在由指定的键映射的“键-值 对”,返回true

//2、创建Map集合对象把4个狗狗对象放入其中
        Map dogMap = new HashMap();
        dogMap.put(ououDog.getName(),ououDog);
        dogMap.put(yayaDog.getName(),yayaDog);
        dogMap.put(meimeiDog.getName(),meimeiDog);
        dogMap.put(feifeiDog.getName(),feifeiDog);

遍历Map集合

方法1:通过迭代器Iterator实现遍历
获取Iterator :Collection 接口的iterator()方法
Iterator的方法
boolean hasNext(): 判断是否存在另一个可访问的元素
Object next(): 返回要访问的下一个元素
方法2:增强for循环

迭代器Iterator

使用Iterator和增强型for循环遍历Map集合

        //3、创建迭代器依次输出集合中所有信息
        System.out.println("使用Iterator遍历,"+"所有狗狗的昵称和品种分别是:");
        Set keys=dogMap.keySet();//取出所有Key的集合
        Iterator it=keys.iterator();  //获取Iterator对象
        while(it.hasNext()){
            String key=(String)it.next();//取出key
            Dog dog=(Dog)dogMap.get(key); //根据Key取出对应的值
            System.out.println(key+"\t"+dog.getBreed());
        }
            //使用foreach语句输出集合中的所有信息
        for(Object key:keys){
        Dog dog=dogMap.get(key);
        System.out.println(key+"\t"+dog.getBreed());
        }

泛型集合

Vector和ArrayList的异同

实现原理、功能相同,可以互用
主要区别:
Vector线程安全,ArraysList重速度 轻安全,线程非安全
长度需增长时,Vector默认增长一倍,ArrayList增长50%

Hashtable和HashMap的异同

实现原理、功能相同、可以互用
主要区别
Hashtable继承Dictionary类,HashMap实现Map接口
Hashtable线程安全,HashMap线程非安全
Hashtable不允许null值 HashMap允许null值

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值