Java 学习笔记 两大集合框架Map和Collection
两大框架图解
Collection接口
由第一张图,我们可以知道,Collection接口的子接口有三种,分别是List接口,Set接口和Queue接口
List接口
允许有重复的元素,元素按照添加的顺序进行排序
-
接口方法
- void add(int index,Objext o)
在集合的指定位置插入元素
- Object get(int index)
返回集合中某个指定位置的元素
- int indexOf(Object o)
返回第一次出现该元素的索引(下标),如果不包含此元素,返回-1
- int lastIndexOf(Object o)
返回最后一次出现该元素的索引(下标),如果不包含此元素,返回-1
- Object remove(int index)
移除集合某个索引的元素
- Object set(int index,Object o)
用指定的元素替换集合中某个指定下标的数据元素
- void add(int index,Objext o)
-
接口实现类的使用
-
ArrayList
新增方法:
addFirst
getFirst
removeFirst
addLast
getLast
removeLast
特点:在存储方式上是采用数组进行顺序存储
List list = new ArrayList(); List<泛型> list = new ArrayList<>();
-
LinkedList
特点:在存储方式上是采用链表进行链式存储
LinkedList<> list = new LinkedList<>();
-
PS:由于ArrayList是采用数组进行存储的,所以添加元素或者是删除元素时,需要批量移动元素,所以性能较差。但查询元素的时候,可以通过下标直接进行访问,所以遍历元素或随机访问元素的时候效率高。
而LinkedList与ArrayList相反
list迭代
如果想在list的迭代中操作list中的元素,例如删除,添加,使用listiterator,listiterator有add,set,remove
List<Book> books = new ArrayList<>();
//添加数据
for (int i = 1; i < 10; i++) {
Book book = new Book();
book.setBno("00" + i);
books.add(book);
}
System.out.println(books.size());
//通过ListIterator在遍历删除数据
ListIterator<Book> bookListIterator = books.listIterator();
String bno = "002";
while (bookListIterator.hasNext()) {
Book next = bookListIterator.next();
if (next.getBno().equals(bno)) {
bookListIterator.remove();
break;
}
}
//输出结果测试
System.out.println("-----");
System.out.println(books.size());
for (Book book : books) {
System.out.println(book.toString());
}
Set接口
不允许有重复的元素,元素没有顺序
-
接口方法
add
clear
contains
remove
和之前的List差不多,这里就不多说 - 接口实现类的使用
-
HashSet
下面的图片很明显,体现了没有重复元素的规则
**一般使用的话还是使用泛型使用** Set<Book> books = new HashSet<>();
-
TreeSet
由之前介绍的第四张图可以看到,TreeSet既继承了Set接口,也继承了SortedSet接口(排序接口)没有使用泛型,默认使用的是String类型,String类实现了Comparable接口,默认是按字典排序,但是图中明显没有实现排序?不理解。。
我使用英文开头,才能实现排序
- Set集合遍历
//Iterator Iterator iterator = set.iterator(); while (iterator.hasNext()){ System.out.println(iterator.next()); } //foreach for (String s:set) { System.out.println(s); }
-
Queue接口
较少使用。。
Map接口
使用键值对(key value)进行数据存储,key与value是一种映射关系
- 接口方法
Object put(Object key,Object value)
将一个键值对存到Map中Object get(Object key)
由key获得valueObject remove(Object key)
删除该键值对Set keyset()
返回当前包含当前map的所有key的Set集合Collection values()
返回当前包含当前map的所有value的Collection集合boolean containsKey(Object key)
是否包含某个keyboolean containsValue(Object Value)
是否包含某个Valueint size()
返回当前map集合键值对的个数
-
接口实现类的使用
-
HashMap的使用
Map<String,String> map = new HashMap<>();
Map<Integer,String> map = new HashMap<>();
-
TreeMap的使用
Map<String,String> map = new TreeMap<>();
与之前的TreeSet一样,TreeMap也是实现了SortedMap借口,带有排序,默认是按照key的数值自然排序(也就是升序)
-
原文地址:https://www.cnblogs.com/chaoyang123/p/11549809.html
- XML/HTML/JSON——数据抓取过程中不得不知的几个概念
- R语言网络数据抓取的又一个难题,终于攻破了!
- R语言数据清洗实战——高效list解析方案
- 左手用R右手Python系列——循环中的错误异常规避
- SpringBoot2.x开发案例之整合Quartz任务管理系统
- 给出一组非负整数,重新排序组成最大的数
- [机智的机器在学习] TensorFlow实现Kmeans聚类
- [机智的机器在学习] 利用TensorFlow实现多元线性回归分类器
- [数据结构和算法]《算法导论》动态规划笔记(1)
- [数据结构和算法]《算法导论》动态规划笔记(2)
- [算法与数据结构] 《算法导论》堆排序笔记
- [数据结构与算法] 链表的其他类型
- [数据结构与算法] 链接表总结
- [数据结构与算法] 线性表总结
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- dotNET:怎样处理程序中的异常(实战篇)?
- 二维背包问题
- 小程序系列之禁用视频快进
- springBoot整合Mq报错:JmsMessagingTemplate that could not be found
- TCP:测试小工具TCPing
- 对象实例化内存布局与访问定位 Krains 2020-08-14
- 基于Docker Compose部署分布式MinIO集群
- Go语言 | 从并发模式看channel使用技巧
- 字节码文件 Krains 2020-08-04
- 为WordPress添加自定义设置上传头像功能
- 229. 求众数 II Krains 2020-08-04 16:03:03 数学
- 部署 Consul服务实现Docker容器跨主机通信
- 【测试】 Java如何优雅的生成测试数据
- Spring事物的传播行为案例分析
- Ingress-nginx灰度发布功能详解