六、容器(高琪java300集+java从入门到精通笔记)
容器(集合:是有接口和实现类组成):容器和数组的不同之处是,容器长度可变,用来存放对象的引用(数组存放基本类型???)
- Collection(接口)
- List(接口)(有序:每个元素都有索引标记,顺序即插入顺序,可重复:满足
e1.equals(e2))
主要是set get方法
ArrayList(方法/实现类)
底层用数组(Object[])实现。线程不安全,效率高(查询效率高,增删效率低)LinkedList:底层用双向链表实现。线程不安全,效率高(查询效率低,增删效率高)
Vector:底层用数组实现。线程安全(增加了synchronized同步标记),效率低
Set(无序,不可重复,只能有一个null×
只适用于HashSet,往set中加入元素,本质就是把这个元素作为key加入到了内部的map中)HashSet(内部是使用HashMap实现(通过它来存储数据))(HashSet本质就是一个简化版的HashMap)
TreeSet(不能放null)内部需要对存储的元素进行排序,因此,我们对应的类需要实现Comparable接口。这样,才能根据重写compareTo()方法比较对象之间的大小,才能进行内部排序。
新方法见书P263-264
- Map(没有继承Collection不重复 允许值对象为空)
采用“key-value”来存储我们(比较复杂)数据。
IMG_256
keySet()返回该集合中的所有key对象形成的Set集合
Values()返回该集合中所有值对象形成的Collection集合
HashMap 底层采用了哈希表存储数据 键重复则键值对替换 线程不安全,效率高
允许key或value为null。HashTable线程安全,效率低 不允许key或value为null。
TreeMap 红黑二叉树 映射关系有一定顺序 键对象升序 不允许键对象为null
Iterator( 如果遇到遍历容器时,判断删除元素的情况,使用迭代器遍历!)
通过它,可以遍历容器中元素
Iterator.next()方法返回的是Object 所以要向下强制转型
List(for,迭代器)
遍历List方法一:普通for循环
1 2 3 4 | for(int i=0;i<list.size();i++){//list为集合的对象名 String temp = (String)list.get(i); System.out.println(temp);//System.out.println(list.get(i)) } |
---|
遍历List方法二:增强for循环(使用泛型!)
1 2 3 | for (String temp : list) { System.out.println(temp); } |
---|
遍历List方法三:使用Iterator迭代器(1)
1 2 3 4 | for(Iterator iter= list.iterator();iter.hasNext()?{ String temp = (String)iter.next(); System.out.println(temp); } |
---|
遍历List方法四:使用Iterator迭代器(2)
1 2 3 4 5 6 | Iterator iter =list.iterator(); while(iter.hasNext()){ Object obj = iter.next(); iter.remove();//如果要遍历时,删除集合中的元素,建议使用这种方式! System.out.println(obj); |
---|
Set(迭代器,增强for循环)
遍历Set方法一:增强for循环
1 2 3 | for(String temp:set){ System.out.println(temp); } |
---|
遍历Set方法二:使用Iterator迭代器
1 2 3 4 | for(Iterator iter = set.iterator();iter.hasNext()?{ String temp = (String)iter.next(); System.out.println(temp); } |
---|
Map(keySet和entrySet)
遍历Map方法一:根据key获取value
1 2 3 4 5 | Map<key, values> map = new HashMap<key, value>(); Set<key> keySet = map.keySet(); //for(key k : keySet){ //System.out.println(k); //} |
---|---|
for (Iterator<key> iterator = keySet.iterator(); iterator.hasNext()? { String key = (key)iterator.next(); System.out.println(key + “–” + map.get(key)); } |
遍历Map方法二:使用entrySet
1 2 3 4 | Set<Map.Entry<key, values>> entrySet = map.entrySet(); for (Iterator<Entry<key, values>> iterator = entrySet.iterator(); iterator.hasNext()? { Entry<key, values> e = (Entry<key, values>) iterator.next(); System.out.println(e.getKey()+"–"+e.getValue()); |
---|
- 泛型(通过泛型将错误提前,保证程序稳定性和更高的可读性):
它可以帮助我们建立类型安全的集合。在使用了泛型的集合中,遍历时不必进行强制类型转换(泛型之前都是向上/向下转型)。 泛型的本质就是“数据类型的参数化”。
我们可以把“泛型”理解为数据类型的一个占位符(形式参数),即告诉编译器,在调用泛型时必须传入实际类型。JDK提供了支持泛型的编译器,将运行时的类型检查提前到了编译时执行,提高了代码可读性和安全性。
class 类名<T> T可以用来声明数组类型T[] array T只能是类类型
class 类名<T,E,V>
限制泛型class 类名<T extends anyClass> anyClass指接口/类
类型通配符 泛型类名称<?extends anyClass> 可以用在方法形参里
A<?>=A<?Object>
限制泛型和使用通配符的区别:使用通配符声明的名称实例化的对象不能对其加入新的信息,只能获取或删除。set()×
5.向下extends也可以向上super
- Collections工具类(排序/查找)
. void sort(List) //对List容器内的元素排序,排序的规则是按照升序进行排序。
2. void shuffle(List) //对List容器内的元素进行随机排列。3. void reverse(List) //对List容器内的元素进行逆续排列 。4. void fill(List, Object) //用一个特定的对象重写整个List容器。5. int binarySearch(List,
Object)//对于顺序的List容器,采用折半查找的方法查找特定对象。
哈希表(数组+链表):
[外链图片转存失败(img-g8L2x92o-1562655749060)(media/60064eb152707799667d8fce5ab96221.png)]
binarySearch(List,
Object)//对于顺序的List容器,采用折半查找的方法查找特定对象。
哈希表(数组+链表):
[外链图片转存中…(img-g8L2x92o-1562655749060)]
Entry[] table 就是HashMap的核心数组结构,我们也称之为“位桶数组”
六、容器(高琪java300集+java从入门到精通笔记)相关推荐
- 【160天】尚学堂高琪Java300集视频精华笔记(129)
明天开始,专栏增加一个黑马程序员的课程更新. 其它容器收尾讲解 队列Queue与Deque(单向队列与双向队列) Enumeration(较老的接口,JDK1.5前使用频繁,维护旧系统会用到) Has ...
- 尚学堂 高琪JAVA300集第十一章作业 编程题答案
本人 JAVA初学者 在寻找这一方面的答案时没有看见 ,本着分享的精神 自己做了出来 也就传上来了 水平有限 存在有错的地方或者改进的方法 ,望大佬们可以提出 万分感谢. 1.1. 设计一个多线程的程 ...
- java高淇_高淇java300集JAVA常用类作业
一.选择题 1. 以下选项中关于int和Integer的说法错误的是( B D).(选择二项) A.int是基本数据类型,Integer是int的包装类,是引用数据类型 B.int的默认值是0,Int ...
- Java从入门到精通笔记20230106--百钱百鸡引出的疑问
一.5文钱可以买1只公鸡,3文钱可以买1只母鸡,1文钱可以买3只雏鸡,现在用100文钱买100只鸡,那么公鸡.母鸡.雏鸡各有多少只? 1.Python写法 首先在Python刷题时遇到过,实现起来相对 ...
- Java从入门到精通章节练习题——第六章
Java从入门到精通章节练习题--第六章 Exercise 1 简易计算器 Exercise 2 购买电影票 Exercise 3 计算平均分 Exercise 4 厘米与英寸互转 Exercise ...
- Java从入门到精通十六(函数式接口编程)
Java从入门到精通十六(函数式接口)
- java从入门到精通_想要开始学java?你要的java从入门到精通布列如下!
java从入门到精通,让我来告诉你! 毫无疑问,java是当下最火的编程语言之一.对于许多未曾涉足计算机编程的领域「小白」来说,深入地掌握java看似是一件十分困难的事.其实,只要掌握了科学的学习方法 ...
- 详细:JAVA从入门到精通视频教程,后台学习历程
详细:JAVA从入门到精通视频教程,后台学习历程 ==基础部分 由于百度分享有时效性 想要免费资源的请加645969403 1.java基础:高琪java开发300集 链接:https://pan.b ...
- java从入门到精通二十三(Servlet)
java从入门到精通二十三(Servlet) Servlet 说明 Servlet初步入门尝试 Servlet生命周期 Servlet方法说明和体系结构 方法说明 体系结构说明 一些优化封装 urlP ...
- java从入门到精通第四版明日科技书籍简介及下载
Java从入门到精通(第4版)(附光盘) 平装 – 2016年10月20日 <Java从入门到精通(第4版)(附光盘)>从初学者角度出发,通过通俗易懂的语言.丰富多彩的实例,详细介绍了使用 ...
最新文章
- ShineTime - 带有 CSS3 闪亮特效的缩略图相册
- Android中的常见布局
- me21n增强BADI:ME_PROCESS_PO_CUST之process_account
- 多元线性回归算法python实现_手写算法-Python代码推广多元线性回归
- stack overflow at line
- ux和ui_从UI切换到UX设计
- 写出TREE-PREDECESSOR的伪代码(算法导论第三版12.2-3)
- python数字转字符串_python如何将字符转换为数字
- docker重命名镜像
- python udp编程_Python UDP编程小示例
- debug运行时出现错误unicodedecodeerror_怎么回事??抖音直播伴侣!出现运行错误...
- git学习笔记-(13-reset三部曲)
- 【最新砍价小程序源码】
- 计算机的显卡控制面板在哪里,nvidia控制面板在哪,详细教您如何进入英伟达控制面板...
- springcloud学习-Eureka、Eureka高可用集群、Ribbon客户端负载均衡策略
- MATLAB | 画彩色图像的直方图,改对比度,计算均值、方差和信息熵
- SLT 定义vetctor对象,vector构造函数
- 长文详解材料阻燃性能试验方法
- 玉米社:sem竞价推广如何选择投放时间、投放地域
- marker 上的气泡 callout的使用
热门文章
- Java学习方法——类的构造方法
- python能为我们做什么读后感作文_《与运气竞争》读书笔记 坚韧不拔|静水流深|读书|写作|博雅|数据分析|Python|商业|独立·独特·自立门户 kebook...
- Matlab 生成方波信号
- HTML做一个简单的页面(纯html代码)地球专题学习网站
- MySQL添加新用户、创建数据库、为新用户分配权限、收回权限
- Redis的数据变成backup
- 进击ReactNative-徐如林-React源码解析
- [跟进]_微软关闭MSN博客,腾讯第一时间抢占市场
- 算法题--广度优先算法(素数行李箱密码解法加步骤)
- 2015InfoQ软件大会技术记录