Java容器可分为两大类: ● Collection * List ArrayList LinkedList Vector(了解,已过时) * Set HashSet TreeSet LinkedHashSet ● Map * HashMap * TreeMap LinkedHashMap ConcurrentHashMap Hashtable(了解,已过时) 一、ArrayList和Vector的区别 共同点: 这两个类都实现
前言 声明,本文用的是jdk1.8 花了一个星期,把Java容器核心的知识过了一遍,感觉集合已经无所畏惧了!!(哈哈哈….),现在来总结一下吧~~ 回顾目录: Collection总览 List集合就这么简单【源码剖析】 Map集合、散列表、红黑树介绍 HashMap就是这么简单【源码剖析】 LinkedHashMap就这么简单【源码剖析】 TreeMap就这么简单【源码剖析】 ConcurrentHashMap基于JDK1.8源码剖析 Set集合就这么简单! Java容器可分为两大类: Collectio
笔记内容为网课随堂笔记,3.5倍速快速复习三个小时写的笔记,比较粗糙 附上思维导图截图 建议图片另存为到本地观看
ArrayList实现了List接口它是一个可调整大小的数组可以用来存放各种形式的数据。并提供了包括CRUD在内的多种方法可以对数据进行操作但是它不是线程安全的,外ArrayList按照插入的顺序来存放数据。
1.基本介绍: 集合就是存放对象的,他比数组好的一点就是他一开始不清楚自己长度 容器一般是分为很多种的,很多的容器在一起然后进过断的抽象和抽取就成了一个体系,我们称之为集合框架 我们看体系首先是看顶层的容器,他是底层的容器都有的特性,然后在逐步求精 最顶层的我们称之为collection 在util包中的 在collection中分为两个比较常用的子接口分别是list和set。 list是类似于数组的那种,也就是集合元素可重复,有序有脚标。 set则为无序的,所以集合元素不可重复,不可脚标查找 以下是
Map是Java三种集合中的一种位于java.util包中,Map作为一个接口存在定义了这种数据结构的一些基础操作,它的最终实现类有很多:HashMap、TreeMap、SortedMap等等,这些最终的子类大多有一个共同的抽象父类AbstractMap。在AbstractMap中实现了大多数Map实现公共的方法。本文介绍Map接口定义了哪些方法,同时JDK8又新增了哪些。
假设Object为User,此处User类中省略getting/setting以及相关构造方法。
由于各种操作系统所支持的指令集不是完全一致,所以在操作系统之上加个虚拟机可以来提供统一接口,屏蔽系统之间的差异。
HashMap有一个问题,就是迭代HashMap的顺序并不是HashMap元素插入的顺序,也就是无序,而LinkedHashMap是有序的。
hash code、equals是Java用来比较对象是否相等,下面介绍一下自己在工作中对hash code、equals的使用. 首先介绍下String类中的hashCode、equals方法:
重载:是同样的一个方法能够根据输入数据的不同,做出不同处理。重载是同一个类中多个同名方法根据不同的传参执行不同的逻辑处理。 重写:是当子类继承自父类的相同方法,输入数据一样,但是要做出的和父类不一样的响应时,就要重写父类方法。重写是子类堆父类的重新改造,外部样子不能改变,但是可以改变内部逻辑。
前些天写了几篇面试题的文章,其中包括《重写equals方法为什么通常会重写hashcode方法?》,有朋友可能会说,这类面试题都是“面试造火箭,工作拧螺丝”。不可否认,有些面试题的确如此。
在 Java 核心 API 中,有许多应用 final 的例子,例如 java.lang.String,整个类都是 final 的。为类指定 final 修饰符可以让类不可以被继承,为方法指定 final 修饰符可以让方法不可以被重写。如果指定了一个类为 final,则该类所有的方法都是 final 的。Java 编译器会寻找机会内联所有的 final 方法,内联对于提升 Java 运行效率作用重大,具体可以查阅 Java 运行期优化相关资料,此举能够使性能平均提高 50%。
equals是Object的方法,底层还是==实现的,但是有的类重写了equals方法,例如string,重写之后比较的值,如果重写了equals一定要重写hashcode,如果只重写equals不重写hashCode,会在某些场景下导致程序异常执行,也会降低hash类型的集合的效率
Arrays.asList()将返回 ArrayList私有静态类的 Arrays,而不是 java.util.ArrayList类。该 java.util.Arrays.ArrayList有set(),get(),contains()方法,但没有添加元素的任何方法,所以它的大小是固定的。要创建一个real ArrayList,您应该执行以下操作:
1、加入到hashset中的自定义类的对象,为确保他们不重复,需要对他们的类重写equals()和hashcode()的方法。
Collection 接口的接口 对象的集合(单列集合) ├——-List 接口:元素按进入先后有序保存,可重复 │—————-├ LinkedList 接口实现类, 链表, 插入删除, 没有同步, 线程不安全 │—————-├ ArrayList 接口实现类, 数组, 随机访问, 没有同步, 线程不安全 │—————-└ Vector 接口实现类 数组, 同步, 线程安全 │ ———————-└ Stack 是Vector类的实现类 └——-Set 接口: 仅接收一次,不可重复,并做内部排序 ├—————-└HashSet 使用hash表(数组)存储元素 │————————└ LinkedHashSet 链表维护元素的插入次序 └ —————-TreeSet 底层实现为二叉树,元素排好序
这本书汇集了C#编写中的一些建议、注意事项和小技巧,为了温故知新,又拿出来翻看了一遍。很多主题要阐述的内容是显而易见、不言自明的,就没有再写摘要。部分主题的名称起得并不够好,我进行了改动;个别建议是有争议的,我修改为了我认为合理的方式(红色字体)。
代码优化最重要的作用应该是避免未知的错误,因此在写代码的时候,从源头开始注意各种细节,权衡并使用最优的选择,将会很大程度上避免出现未知的错误,从长远看也极大的降低了工作量。所以说代码优化的目标是减小代码体积、提高代码运行效率。优化是无止境的,本文也只给出整理的一些常见优化建议。
// 遍历后判断赋给另一个List集合,保持原来顺序 public static void ridRepeat1(List<String> list) { System.out.println("list = [" + list + "]"); List<String> listNew = new ArrayList<String>(); for (String str : list) { if (!listNew.contains(str)) { listNew.add(str); } } System.out.println("listNew = [" + listNew + "]"); }
2) 因为 Set 存储的是不重复的对象,依据 hashCode 和 equals 进行判断,所以 Set 存储的对象必须重写这两个方法。
addAll方法:是批量添加方法,可以利用一个集合先把数据都添加到这个集合里,然后再拿到这个集合对象使用批量添加方法将这个集合对象添加到指定的集合里,就实现了批量添加:
碰到List去重的问题,除了遍历去重,我们常常想到利用Set集合不允许重复元素的特点,通过List和Set互转,来去掉重复元素。
默认情况下:扩容为原来的 1.5 倍,同时需要将原有的数组中的数据复制到新的数组中。 结论:建议开发中使用带参的构造器:ArrayList list = new ArrayList(int capacity)
本文已更新至http://www.cnblogs.com/aehyok/p/3624579.html 。本文主要学习记录以下内容:
反例:直接使用toArray无参方法存在问题,此方法返回值只能是Object[]类,若强转其它类型数组将出现ClassCastException错误。 5. 【强制】使用工具类Arrays.asList()把数组转换成集合时,不能使用其修改集合相关的方法,它的add/remove/clear方法会抛出UnsupportedOperationException异常。 说明:asList的返回对象是一个Arrays内部类,并没有实现集合的修改方法。Arrays.asList 体现的是适配器模式,只是转换接口,后台的数据仍是数组。
JavaBean为什么要重写hashCode()方法和equals方法,我记得当时我巴拉巴拉半天就是没有说到重点.
前言 参考:阿里巴巴Java开发手册V1.3.0 总结比较重要的,对面试有用的开发规约 一、编程规约 (一)命名风格 【强制】POJO 类中布尔类型的变量,都不要加 is,否则部分框架解析会引起序列化错误。 反例:定义为基本数据类型 Boolean isDeleted;的属性,它的方法也是 isDeleted(),RPC 框架在反向解析的时候,“以为”对应的属性名称是 deleted,导致属性获取不到,进而抛出异常。 【推荐】如果模块、接口、类、方法使用了设计模式,在命名时体现出具体模式。 p
上篇 关于 equals 和 hashCode 关于 equals 和 hashCode 的基本性质已经论述过了。
add(E e) 确保此 collection 包含指定的元素(可选操作)。
结果示意图: 前言: 很多时候或者很多项目中都会遇到集合中重复的部分,如何去除这些重复的部分呢?接下来小编就用创建新集合的方式去除集合中重复的部分。 原理: 原理就是创建新的集合 把旧的集合复制到新的
泛型的使用:一般在创建对象时,将未知的类型确定具体的类型。当没有指定泛型时,默认类型为Object类型。
Collections类都有个remove方法:将对象从容器中移除。 但并非删除该对象,移除之后,该对象依旧还在。因为容器存放的时该对象的引用地址,移除的只是地址,实际上对象本身还在内存中。
Object类的equals方法默认是比较两个对象的地址值,没有意义。 所以我们要重写equals方法,比较两个对象的属性。 重写equals方法
Java中类是对一组行为或者特征的描述,对象则为所描述特征和行为的具体实现。而作为概念层次的类,其本身也拥有某些共同的特性,如都具有类名称、由类加载器加载,都具有父类,属性和方法等。于是,Java中专门定义了一个类Class去描述其他类 所具有的特性,所以,从这个角度来看类本身就是Class类的对象。
最近看到网上流传着,各种面试经验及面试题,往往都是一大堆技术题目贴上去,而没有答案。
在真实的开发场景中,系统的每个模块都是分配给不同的团队或个人来开发的。这使得事前沟通变得尤为重要,且沟通问题也时有发生。现在公司有两个模块无法兼容,难道只能重写其中的一个吗?
在定义泛型时,我们可以通过extends来限定泛型类型的上限,也可以通过super来限定下限,这两个限定字一般会和?等关键字搭配使用。 比如有这样的代码List<? super Fat
上一篇:Java--集合类之Vector、BitSet、Stack、Hashtable 集合(Collection):一组单独的元素,通常应用了某种规则。在这里,一个 List(列表)必须按特定的顺序容纳元素,而一个Set(集)不可包含任何重复的元素。相反,“包”(Bag)的概念未在新的集合库中实现,因为“列表”已提供了类似的功能。 映射(Map):一系列“键-值”对(这已在散列表身上得到了充分的体现)。从表面看,这似乎应该成为一个“键-值”对的“集合”,但假若试图按那种方式实现它,就会发现实现过程相当笨拙
一、去除List中重复的String public List<String> removeStringListDupli(List<String> stringList) { Set<String> set = new LinkedHashSet<>(); set.addAll(stringList); stringList.clear(); stringList.addAll(set); return stringList; } 或使用Java8的写法: Lis
参考菜鸟教程:http://www.runoob.com/java/java-collections.html
数据结构是以某种形式将数据组织在一起的集合,它不仅存储数据,还支持访问和处理数据的操作。Java提供了几个能有效地组织和操作数据的数据结构,这些数据结构通常称为Java集合框架。 Java工具
java容器类用途是 保存对象 ,包括List、Set、Queue和Map,将其划分为两个不同的概念(在java中都是通过接口来实现的)。下面我们将深入的对Java容器进行讲解,被分析其存储原理(本章基于JDK8对于Java容器进行学习)
从这篇开始,我将把我所学的java体系的知识点总结并分享出来,并放在GitHub上,希望你能有所收获。
字节序是指多字节数据在计算机内存中存储或网络传输时每个字节的存储顺序。通常由小端和大端两组方式。
在说集合前我们不得不说一下数组 数组的作用: 存放一组相同的数据类型(基本或对象)的数据,从而实现对数据的管理 优势:可以快速的通过下标对数组元素进行访问,效率高 劣势:容量实现定义好了,不能随着需求变化而扩容 因此出现了更好的集合框架 一、数组和集合的比较 数组不是面向对象的,存在明显的缺陷,集合弥补了数组的缺点,比数组更灵活更实用,而且不同的集合框架类可适用不同场合。如下: 1:数组能存放基本数据类型和对象,而集合类存放的都是对象的引用,而非对象本身! 2:数组容易固定无法动态改变,集合类容量动态改变。
面向过程:是分析解决问题的步骤,然后用函数把这些步骤一步一步地实现, 然后在使用的时候一一调用则可。性能较高,所以单片机、嵌入式开发等-一般采用面向过程开发
迭代对于我们搞Java的来说绝对不陌生。我们常常使用JDK提供的迭代接口进行Java集合的迭代。
Set:注重独一无二的性质,该体系集合可以知道某物是否已近存在于集合中,不会存储重复的元素
存储对象可以使用数组 (基本数据类型 & 引用数据类型) 和集合 (引用数据类型),用数组存储对象的弊端有:一旦创建,其长度不可变;数组中真正存储的对象个数不可知,除非自定义类。使用集合可以解决这些问题。
领取专属 10元无门槛券
手把手带您无忧上云