07java基础进阶之集合框架

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

其中经常使用到的接口,如图所示:(就是用红框包起来的)
在这里插入图片描述
其中:Collections 提供了对集合进行排序、遍历等多种算法实现

Java集合框架包含的内容:

  • Collection 接口存储一组不唯一,无序的对象
  • List 接口存储一组不唯一,有序(插入顺序)的对象

例如:
在这里插入图片描述

  • Set 接口存储一组唯一,无序的对象
    例如:
    在这里插入图片描述

  • Map接口存储一组键值对象,提供key到value的映射
    例如:
    在这里插入图片描述

List接口的实现类:

list 包含两个经常使用到的类:ArrayList和LinkedList

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

ArrayList集合类的使用:

创建ArrayList列表,并进行存储数据,以及获取长度和逐歌输出内容

 //创建四个狗狗对象	
 … …	
 List dogs = new ArrayList();  //创建ArrayList对象并存储狗狗
 dogs.add(ououDog);//通过add方法进行添加对象
 dogs.add(yayaDog);//这里没有使用泛型,不能指定进行添加的类型
dogs.add(meimeiDog);
dogs.add(2, feifeiDog);  // 添加feifeiDog到指定位置(2)		
System.out.println("共计有" + dogs.size() + "条狗狗。");//size方法拿到这个列表内的存入的对象数目
System.out.println("分别是:");
for (int i = 0; i < dogs.size(); i++) {
	Dog dog = (Dog) dogs.get(i);//逐个获取各个元素,没有使用泛指,所以在这里获取到内容之后,需要进行强制转换为Dog的对象类型
	… …
}

使用ArrayList移除、判断元素

… …		
 dogs.remove(0); // 删除下标为0的元素
 dogs.remove(feifeiDog);//删除指定狗狗
  … …
		
 if(dogs.contains(meimeiDog))//判断是否包含指定狗狗,返回值为boolean类型    	
 System.out.println("\n集合中包含美美的信息");
 else
	System.out.println("\n集合中不包含美美的信息");

List接口常用方法:在这里插入图片描述

在这里插入图片描述

LinkedList集合类的使用:

创建LinkedList列表对象,通过add方法进行添加,获取第一条和最后一条元素信息,删除第一和最后元素(使用到的是LinkedList特有的方法)

 // 创建多个狗狗对象
 … …
 LinkedList dogs = new LinkedList();//创建LinkedList集合对象
 dogs.add(ououDog);
 dogs.add(yayaDog);//存储狗狗对象
 dogs.addLast(meimeiDog);//在第一个位置添加元素
 dogs.addFirst(feifeiDog);//在最后一个位置添加元素
		
 Dog dogFirst= (Dog)dogs.getFirst();//获取第一条狗狗信息
 System.out.println("第一条狗狗昵称是"+dogFirst.getName() );
		//上边也说过  这个没有使用到泛型,这里获取到元素之后,需要进行强制转换
 Dog dogLast= (Dog)dogs.getLast();//获取最后一条狗狗信息
 System.out.println("最后一条狗狗昵称是"+dogLast.getName());
				
 dogs.removeFirst();//删除第一个狗狗
 dogs.removeLast();//删除最后一个狗狗	

LinkedList的特殊方法:

在这里插入图片描述

ArrayList和LinkedList的区别:

  • 存储方式
  • ArrayList:长度可变的数组,存储空间连续
  • LinkedList集合:链表式结构存储
  • 执行效率
  • ArrayList:遍历和随机访问效率高
  • LinkedList集合:插入和删除效率高

Map接口:

Map 当中存储的内容分为两个,统称为键值对,由key和value结合(key:value)

废话不多说,直接上代码!

Map countries = new HashMap();//使用HashMap存储多组键值对
 countries.put("CN", "中华人民共和国");//Map的特有方法put,进行添加元素
 countries.put("RU", "俄罗斯联邦");
 countries.put("FR", "法兰西共和国");
 countries.put("US", "美利坚合众国");
  		
 String country = (String) countries.get("CN");//获取指定元素的值     … …
		
 System.out.println("Map中共有"+countries.size() +"组数据");//获取Map元素个数 ,size方法
 countries.remove("FR");//删除指定元素
 System.out.println("Map中包含FR的key吗?" + 
				countries.containsKey("FR"));//判断是否包含指定元素
		
 System.out.println( countries.keySet() ) ;//keySet()显示键集,将所有的键,显示出来
 System.out.println( countries.values() );//values()显示值集,将所有的内容(value),显示出来
 System.out.println( countries );//显示键值对集,将所有的键值对,显示出来

Map接口常用方法:

在这里插入图片描述

迭代器Iterator:

获取Iterator :Collection 接口的iterator()方法
Iterator的方法:

  1. boolean hasNext(): 判断是否存在另一个可访问的元素
  2. Object next(): 返回要访问的下一个元素

遍历集合的方法:

以遍历map集合为例,解说迭代器和增强for循环的使用:

  • 1.使用迭代器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.getStrain());
    }
  • 2.增强for循环

先创建map,再进行使用增强for循环

语法:
for(元素类型t 元素变量x : 数组或集合对象){
引用了x的java语句
}

Map<Integer,Integer> a =new   HashMap<Integer,Integer>;//创建一个Map,使用到了泛型
a.put(1,1);//添加键值对
a.put(2,2);
a.put(3,3);
a.put(4,4);
a.put(5,5);
//采用了增强的for循环
set b = a.keySet();//将所有的键,取出来保存在b中
for(object o : b){
system.out.print(o)
}

泛型集合:

//创建ArrayList集合对象并存储狗狗
 List <Dog> dogs = new ArrayList<Dog>();//标记元素类型,笼统的来说就是那个<>里面存放的是数据类型的包装类,也可以是类;
 dogs.add(dog1);
 … …
 //dogs.add("hello"); 类型不符,出现编译错误
 //  显示第三个元素的信息
 Dog dog = dogs.get(2); //无需类型强制转换 

 //使用foreach遍历dogs对象
 for(Dog dog:dogs){//无需类型强制转换 
	… …
 }

map当中的使用:

 Map<String,Dog> dogMap=new HashMap<String,Dog>();//标记键-值类型<>里面存放的类型是键和值
 dogMap.put(ououDog.getName(),ououDog);
 … …
 /*通过迭代器依次输出集合中所有狗狗的信息*/
 Set<String> keys=dogMap.keySet();   //取出所有key的集合
 Iterator<String> it=keys.iterator();      //获取Iterator对象
 while(it.hasNext()){
	String key=it.next();  //取出key,无需类型转换
	Dog dog=dogMap.get(key);  //根据key取出对应的值,无需类型转换
        … …
 }
 //使用foreach语句输出集合中所有狗狗的信息
 for(String key:keys){
	Dog dog=dogMap.get(key);  //根据key取出对应的值,无需类型转换
 	… …
 }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值