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<>();
PS: 一般在开头声明键值对的类型,如果在后面声明的话,很大可能会报错
TreeMap的使用
Map<String,String> map = new TreeMap<>();
与之前的TreeSet一样,TreeMap也是实现了SortedMap借口,带有排序,默认是按照key的数值自然排序(也就是升序)
Java 学习笔记 两大集合框架Map和Collection的更多相关文章
- Java学习笔记32(集合框架六:Map接口)
Map接口与Collection不同: Collection中的集合元素是孤立的,可理解为单身,是一个一个存进去的,称为单列集合 Map中的集合元素是成对存在的,可理解为夫妻,是一对一对存进去的,称为 ...
- Java学习笔记29(集合框架三:泛型)
泛型的概念: 简单地讲,就是同一个方法(类),可以接受不同的数据类型并运行得到相对应的结果,不会出现安全问题 上一篇有一段这样的代码: 没有定义集合类型.迭代器类型 package demo; imp ...
- Java学习笔记31(集合框架五:set接口、哈希表的介绍)
set接口的特点: 1.不包含重复元素 2.set集合没有索引,只能用迭代器或增强for循环遍历 3.set的底层是map集合 方法和Collection的方法基本一样 set接口的实现类HashSe ...
- Java学习笔记34(集合框架八:综合案例:模拟斗地主的洗牌发牌)
规则: 1.54张扑克牌,有花色 2.顺序打乱,一人一张依次发牌,一人17张,留三张作为底牌 3.看牌:按大小王2A....43的序排列打印 示例: package demo; import java ...
- Java学习笔记30(集合框架四:List接口)
List接口继承自Collection接口 具有重要的三大特点: 1.有序集合:存入和取出的顺序一致 2.此接口的用户可以对列表中每个元素插入位置精确的控制:可以通过索引操作 3.可以存储重复元素 L ...
- Java学习笔记27(集合框架一:ArrayList回顾、Collection接口方法)
集合:集合是java中提供的一种容器,可以用来存储多个数据 集合和数组的区别: 1.数组的长度是固定的,集合的长度是可变的 2.集合中存储的元素必须是引用类型数据 对ArrayList集合的回顾 示例 ...
- Java学习笔记33(集合框架七:Collections工具类)
数组有工具类,方面操作数组 集合也有工具类:Collections 常用方法示例: package demo; import java.util.ArrayList; import java.util ...
- Java学习笔记28(集合框架二:Iterator迭代器)
Iterator接口,翻译成中文是迭代器 迭代器的概念通俗解释: java中有很多的集合,内部有各种存储方法,取出的方式也各不相同,是否可以有一种通用的方式来获取呢? 这种方式类似for循环遍历, 通 ...
- JAVA基础第五章-集合框架Map篇
业内经常说的一句话是不要重复造轮子,但是有时候,只有自己造一个轮子了,才会深刻明白什么样的轮子适合山路,什么样的轮子适合平地! 我将会持续更新java基础知识,欢迎关注. 往期章节: JAVA基础第一 ...
随机推荐
- c# ef 排序字段动态,构建动态Lambda和扩展方法OrderBy
1.动态构建排序 Lambda /// <summary> /// 获取排序Lambda(如果动态排序,类型不同会导致转换失败) /// </summary> /// < ...
- 吴恩达机器学习笔记57-基于内容的推荐系统(Content Based Recommendations)
假使我们是一个电影供应商,我们有 5 部电影和 4 个用户,我们要求用户为电影打分. 前三部电影是爱情片,后两部则是动作片,我们可以看出Alice 和Bob 似乎更倾向与爱情片, 而 Carol 和 ...
- Web前端-JavaScript基础教程上
Web前端-JavaScript基础教程 将放入菜单栏中,便于阅读! JavaScript是web前端开发的编程语言,大多数网站都使用到了JavaScript,所以我们要进行学习,JavaScript ...
- 在vue中使用svg sprite
概述 这几天研究了一下在vue中使用svg sprite,有些心得,记录下来,供以后开发时参考,相信对其它人也有用. 在vue中导入svg 在vue中导入svg的方法有很多种,比如在img标签的src ...
- 什么是REST接口
转载自:http://baijiahao.baidu.com/s?id=1591007540303121112&wfr=spider&for=pc 从事web开发工作有一小段时间,RE ...
- Redis 设计与实现 (三)--持久化
RDB 持久化 一.生成RDB cmd:SAVE --阻塞进程,执行完,才能有效接收客户端命令. cmd: BGSAVE --非阻塞,开启子进程保存. 客户端如果发送SAVE和BGSAVE命令直 ...
- SecureCRT8.1发送命令到多个或所有linux终端
- EF下lambda与linq查询&&扩展方法
1. linq查询数据 WebTestDBEntities db = new WebTestDBEntities(); 1.1 linq查询所有列数据 var userInfoList = from ...
- Redis学习——Windows环境下Redis的安装(二)
一.说明 之前介绍了Linux环境下Redis的安装,这次介绍一下Windows环境下Redis的安装,首先要讲的是,Redis官方只支持Linux,还好 Microsoft Open Tech gr ...
- Dubbo(二) —— dubbo配置
一.配置原则 JVM 启动 -D 参数优先,这样可以使用户在部署和启动时进行参数重写,比如在启动时需改变协议的端口. XML 次之,如果在 XML 中有配置,则 dubbo.properties ...