您的位置:首页 > 编程语言 > Java开发

07java基础进阶之集合框架

2019-07-26 21:09 369 查看
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/Denial_learn/article/details/97419223

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取出对应的值,无需类型转换
… …
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: