首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Java-持有对象

但当你用ArrayListget()方法取出你认为Apple对象时,得到只是Object引用,必须将其转型为Apple,因此,需要将整个表达式扩起来,调用Appleid()方法之前,强制执行类型...这样,通过使用泛型,你不仅知道编译器将会检查你放置容器对象类型,而且使用容器对象时,可以使用更加清晰语法 上面的例子还说明,如果不需要使用每个元素索引,可以使用foreach语法来选择List...List必须按照插入顺序保存元素,而Set不能有重复元素。Queue按照排队规则来确定对象产生顺序(通常于它们被插入顺序相同) 2)Map。一组成对“键值对”对象,允许你使用键来查找。...LinkedList随机访问方面相对比较慢,但是它特性集较ArrayList更大 List常见方法: contains()方法来确定某个对象是否列表。...containsAll() 判断一个列表是否某个列表 retainAll() 一种有效交集操作 removeAll() 将从List移除参数List所有元素 addAll() 追加列表末尾

1.1K10

Java8编程思想精粹(十)-容器(上)

但数组具有固定容量,而在更一般情况下,写程序时我们并不知道 将需要多少个对象 是否需要更复杂方式来存储对象 因此数组这一限制过于受限。...然后将整个表达式用括号括起来,以便在调用 Apple id() 方法之前,强制执行转型。 否则,将会产生语法错误。...因此,使用泛型,你不仅知道编译器将检查放入集合对象类型,而且使用集合对象时也可以获得更清晰语法。 泛型下向上转型 当指定了某个类型为泛型参数时,并不仅限于只能将确切类型对象放入集合。...Map 则由大括号括住,每个键和用等号连接(键左侧,右侧)。 ArrayList 和 LinkedList 都是 List 类型,从输出可以看出,它们都按插入顺序保存元素。...不,它只是意味着你应该意识这个问题,如果你开始某个 ArrayList 中间执行很多插入操作,并且程序开始变慢,那么你应该看看你 List 实现有可能就是罪魁祸首。

1.2K41
您找到你想要的搜索结果了吗?
是的
没有找到

Java 编程思想第十二章 - 容器持有对象

然后将整个表达式用括号括起来,以便在调用 Apple id() 方法之前,强制执行转型。否则,将会产生语法错误。...因此,使用泛型,你不仅知道编译器将检查放入集合对象类型,而且使用集合对象时也可以获得更清晰语法。...List 必须以插入顺序保存元素 Set 不能包含重复元素 Queue 按照排队规则来确定对象产生顺序(通常与它们被插入顺序相同)。...Map 则由大括号括住,每个键和用等号连接(键左侧,右侧)。 ArrayList 和 LinkedList 都是 List 类型,从输出可以看出,它们都按插入顺序保存元素。...不,它只是意味着你应该意识这个问题,如果你开始某个 ArrayList 中间执行很多插入操作,并且程序开始变慢,那么你应该看看你 List 实现有可能就是罪魁祸首。

1.3K20

【Java面试总结】Java集合

注意双向链表和双向循环链表区别,下面有介绍!) 插入和删除是否受元素位置影响: ① . ArrayList采用数组存储,所以插入和删除元素时间复杂度受元素位置影响。...链表需要遍历特定位置才能访问特定位置元素,时间复杂度为 O(n),所以不支持快速随机访问。ArrayList实现了RandomAccess接口,就表明了他具有快速随机访问功能。...HashSet如何检查重复 当把对象加入HashSet时,HashSet会先计算对象HashCode来判断对象加入位置,同时也会与其它加入对象HashCode做比较,如果没有相符HashCode...但是如果发现有相同HashCode对象,这时会调用equals()方法来检查HashCode相等对象是否真的相同。如果两者相同,HashSet就不会让加入操作成功。...是判断两个变量或实例所指向内存空间是不是相同 ==是指对内存地址进行比较 equals()是对字符串内容进行比较 ==指引用是否相同 ,equals()指的是是否相同 8.

70810

Java集合框架常见面试题

当我们需要保存一组类型相同数据时候,我们应该是用一个容器来保存,这个容器就是数组,但是,使用数组存储对象具有一定弊端, 因为我们实际开发,存储数据类型是多种多样,于是,就出现了“集合”,...注意双向链表和双向循环链表区别,下面有介绍!) 插入和删除是否受元素位置影响: ArrayList 采用数组存储,所以插入和删除元素时间复杂度受元素位置影响。...但是如果发现有相同 hashcode 对象,这时会调用equals()方法来检查 hashcode 相等对象是否真的相同。如果两者相同,HashSet 就不会让加入操作成功。...openjdk8,HashSetadd()方法只是简单调用了HashMapput()方法,并且判断了一下返回以确保是否有重复元素。...,实际上无论HashSet是否已经存在了某元素,HashSet都会直接插入,只是会在add()方法返回处告诉我们插入是否存在相同元素。

60321

java集合详解完整版(超详细)「建议收藏」

相同时才会判断数组元素和要加入对象内容是否相同,如果不同才会添加进去。...是以hashcode码作为标识,而具有相同内容String对象,hashcode是一样,所以放入内容不能重复。...注意双向链表和双向循环链表区别,下面有介绍!) \3. 插入和删除是否受元素位置影响: ① ArrayList 采用数组存储,所以插入和删除元素时间复杂度受元素位置影响。...但是如果发现有相同hashcode对象,这时会调用equals()方法来检查hashcode相等对象是否真的相同。如果两者相同,HashSet就不会让加入操作成功。...,就判断该元素与要存入元素 hash 以及 key 是否相同,如果相同的话,直接覆盖,不相同就通过拉链法解决冲突。

79820

List,Set,Map三者区别

List(对付顺序好帮手): List接口存储一组不唯一(可以有多个元素引用相同对象),有序对象 Set(注重独一无二性质): 不允许重复集合。不会有多个元素引用相同对象。...Map(用Key来搜索专家): 使用键值对存储。Map会维护与Key有关联。两个Key可以引用相同对象,但Key不能重复,典型Key是String类型,但也可以是任何对象。...注意双向链表和双向循环链表区别,下面有介绍!) 插入和删除是否受元素位置影响: ① ArrayList 采用数组存储,所以插入和删除元素时间复杂度受元素位置影响。...因为进行上述操作时候集合第 i 和第 i 个元素之后(n-i)个元素都要执行向后位/向前移一位操作。... binarySearch()方法,它要判断传入list 是否 RamdomAccess 实例,如果是,调用indexedBinarySearch()方法,如果不是,那么调用iteratorBinarySearch

1.7K10

2018-05-03 Java高级面试题及答案各自子类比较对比一:

如果不考虑线程安全因素,一般用ArrayList效率比较高。 2、如果集合元素数目大于目前集合数组长度时,集合中使用数据量比较大数据,用Vector有一定优势。...3.HashSet要求放入对象必须实现HashCode()方法,放入对象,是以hashcode码作为标识,而具有相同内容String对象,hashcode是一样,所以放入内容不能重复。...2、ConcurrentHashMap采用锁分段技术,将整个Hash桶进行了分段segment,也就是将这个大数组分成了几个小片段segment,而且每个小片段segment上面都有锁存在,那么插入元素时候就需要先找到应该插入哪一个片段...弱引用主要用于监控对象是否已经被垃圾回收器标记为即将回收垃圾,可以通过弱引用isEnQueued方法返回对象是否被垃圾回收器标记。...乐观锁:一段执行逻辑加上乐观锁,不同线程同时执行时,可以同时进入执行,最后更新数据时候要检查这些数据是否被其他线程修改了(版本和执行初是否相同),没有修改则进行更新,否则放弃本次操作。

71050

Java集合详解【面试+工作】

startIndex List subList(int fromIndex, int toIndex) :返回一个子列表List ,元素存放为从 fromIndex toIndex之前一个元素 Set...key访问; 如果有两个Key重复,那么会覆盖之前; 实现类 : HashSet:equals返回true,hashCode返回相同整数;哈希表;存储数据是无序。...HashSet特征 不仅不能保证元素插入顺序,而且元素以后顺序也可能变化(这是由HashSet按HashCode存储对象(元素)决定对象变化则可能导致HashCode变化) HashSet...==操作符检查实参是否为指向对象引用” 使用instanceof操作符检查实参是否为正确类型 把实参转换到正确类型; 对于该类每一个“关键”域,检查实参域与当前对象对应是否匹 配。...java集合类,都是用来存放java对象,这是他们相同点, 区别: 1.同步性: Vector是同步,这个类一些方法保证了Vector对象线程安全,而ArrayList则是异步,因此ArrayList

1.9K60

ArrayList 源码剖析

ArrayList实现了List接口,元素存放数据与放进去顺序相同,允许放入null元素,底层通过数组实现。除该类未实现同步外,其余跟Vector大致相同。...每个ArrayList都有一个容量(capacity),表示底层数组实际大小,容器内存储元素个数不能多于当前容量。当向容器添加元素时,如果容量不足,容器会自动增大底层数组大小。...public E get(int index) { rangeCheck(index); return (E) elementData[index];//注意类型转换 } add() 添加元素之前...跟add()方法类似,插入之前也需要进行空间检查,如果需要则自动扩容;如果从指定位置插入,也会存在移动元素情况。 addAll()时间复杂度不仅跟插入元素多少有关,也跟插入位置相关。...对象能否被GC依据是是否还有引用指向它,上面代码如果不手动赋null,除非对应位置被其他元素覆盖,否则原来对象就一直不会被回收。

35700

JAVA中常见API比较

JDK 官方文档中提到: ReentrantLock是“一个可重入互斥锁 Lock,它具有与使用 synchronized 方法和语句所访问隐式监视器锁相同一些基本行为和语义,但功能更强大...可以使用 isHeldByCurrentThread() 和 getHoldCount() 方法来检查此情况是否发生。...Ø HashMap里面存入键值对取出时候是随机,它根据键HashCode存储数据,根据键可以直接获取它具有很快访问速度。...Map 插入、删除和定位元素,HashMap是最好选择。 Ø TreeMap取出来是排序后键值对。插入、删除需要维护平衡会牺牲一些效率。...Skip list让已排序数据分布多层链表,以0-1随机数决定一个数据向上攀升与否,通过“空间来换取时间”一个算法,每个节点中增加了向前指针,插入、删除、查找时可以忽略一些不可能涉及结点

54730

Java集合详解(超详细)

JDK 5.0之前,Java集合会丢失容器中所有对象数据类型,把所有对象都当成 Object类型处理;从JDK 5.0增加了泛型以后,Java集合可以记住容器对象数据类型。...大多数操作与ArrayList相同,区别在于Vector是线程安全 各种list,最好把ArrayList作为缺省选择。...2)定制排序,比较两个对象是否相同标准为:compare()返回0,不再是equals()方法 向TreeSet添加数据,要求是相同对象。...对于TreeSet集合而言,它判断两个对象是否相等唯一标准是:两个对象通过compareTo(Object obj)方法比较返回。...HashMap扩容:(jdk7) 不断添加过程,会涉及扩容问题,当超出临界(且要存放位置非空)时,扩容。

76120

Java开发人员犯10大错误

二、检查数组是否包含 ---- 开发人员经常这样做: Set set = new HashSet(Arrays.asList(arr)); return set.contains...三、从循环内列表删除元素 ---- 考虑以下代码,该代码迭代期间删除元素: ArrayList list = new ArrayList(Arrays.asList...默认hashCode()方法为不同对象提供不同整数,而equals()方法仅在两个引用引用同一对象时才返回true。所以hashCode()和equals()方法校验结果不相同。...但是对于每个不同,它都需要一个单独对象,并且太多对象可能会导致垃圾回收高成本。可变和不可变之间进行选择时应保持平衡。通常,使用可变对象以避免产生太多中间对象。...九、Super 和 Sub构造函数 ---- ? 因为未定义默认超级构造函数,所以会发生此编译错误。Java,如果类未定义构造函数,则编译器将默认为该类插入默认无参数构造函数。

58210

Java ArrayList源码剖析

总体介绍 ArrayList实现了List接口,是顺序容器,即元素存放数据与放进去顺序相同,允许放入null元素,底层通过数组实现。除该类未实现同步外,其余跟Vector大致相同。...每个ArrayList都有一个容量(capacity),表示底层数组实际大小,容器内存储元素个数不能多于当前容量。当向容器添加元素时,如果容量不足,容器会自动增大底层数组大小。...这两个方法都是向容器添加新元素,这可能会导致capacity不足,因此添加元素之前,都需要进行剩余空间检查,如果需要则自动扩容。扩容操作最终是通过grow()方法完成。...跟add()方法类似,插入之前也需要进行空间检查,如果需要则自动扩容;如果从指定位置插入,也会存在移动元素情况。 addAll()时间复杂度不仅跟插入元素多少有关,也跟插入位置相关。...对象能否被GC依据是是否还有引用指向它,上面代码如果不手动赋null,除非对应位置被其他元素覆盖,否则原来对象就一直不会被回收。

36720

Java 集合框架 ArrayList 源码剖析

总体介绍 ArrayList实现了List接口,是顺序容器,即元素存放数据与放进去顺序相同,允许放入null元素,底层通过数组实现。除该类未实现同步外,其余跟Vector大致相同。...每个ArrayList都有一个容量(capacity),表示底层数组实际大小,容器内存储元素个数不能多于当前容量。当向容器添加元素时,如果容量不足,容器会自动增大底层数组大小。...这两个方法都是向容器添加新元素,这可能会导致capacity不足,因此添加元素之前,都需要进行剩余空间检查,如果需要则自动扩容。扩容操作最终是通过grow()方法完成。...跟add()方法类似,插入之前也需要进行空间检查,如果需要则自动扩容;如果从指定位置插入,也会存在移动元素情况。 addAll()时间复杂度不仅跟插入元素多少有关,也跟插入位置相关。...对象能否被GC依据是是否还有引用指向它,上面代码如果不手动赋null,除非对应位置被其他元素覆盖,否则原来对象就一直不会被回收。

623120

Java基础面试系列(二)

(一般子类会重写) equals比较两个对象是否相等 clone克隆一份对象,此时克隆对象堆内存重新创建,并返回了内存地址 具体使用时候需要实现Cloneable接口否则抛出CloneNotSuppoertedException...哈希算法强调,同一个对象哈希是唯一,这也就是没有重写equals方法之前,判断两个对象是否相等依据。...n),而使用hashcode计算出要添加对象哈希,直接判断Set是否存在这个hash就可以了。...当Put元素时候,首先会检查当前table是否存有,如果没有则通过resize方法创建一个初始容量为16数组,进行添加。...如果此时hash算法计算出来下标数组位有,则比较当前新添加元素和该是否相同,如果相同,直接替换;如果不同,则检查当前节点是不是红黑树节点,如果是红黑树节点,则进行红黑树节点添加;如果不是则进行链表添加

56000

java集合【8】-- ArrayList接口源码解析

关于上面的transient,找到一个靠谱说法: ArrayListelementData这个数组长度是变长,java扩容时候,有一个扩容因子,也就是说这个数组长度是大于等于ArrayList...长度,我们不希望序列化时候将其中空元素也序列化磁盘中去,所以需要手动序列化数组对象,所以使用了transient来禁止自动序列化这个数组。...add(int index, E element) { // 检查插入位置,是否合法 rangeCheckForAdd(index); // 检查是不是需要扩容...; // 实际存储元素个数增加 size++; } 查询元素 get()方法相对比较简单,获取之前检查参数是否合法,就可以返回元素了。...,修改次数增加,然后,将数组元素copy数组即可。

35500

java集合【8】——— ArrayList源码分析

关于上面的transient,找到一个靠谱说法:ArrayListelementData这个数组长度是变长,java扩容时候,有一个扩容因子,也就是说这个数组长度是大于等于ArrayList...长度,我们不希望序列化时候将其中空元素也序列化磁盘中去,所以需要手动序列化数组对象,所以使用了transient来禁止自动序列化这个数组。...add(int index, E element) { // 检查插入位置,是否合法 rangeCheckForAdd(index); // 检查是不是需要扩容...; // 实际存储元素个数增加 size++; } 查询元素 get()方法相对比较简单,获取之前检查参数是否合法,就可以返回元素了。...,修改次数增加,然后,将数组元素copy数组即可。

29220

Java-集合

("贾宝玉"); // void add(int index, Object ele):index 位置插入ele 元素 //index = 1 位置插入一个对象...来保存元素,由于只需要在key中保存,所以采用虚拟对象PRESENT对应map插入key-valuevalue引用。...如果没有相符 hashcode,HashSet 会假设对象没有重复出现,会将对象插入相应位置。...但是如果发现有相同 hashcode 对象,这时会调用对象 equals() 方法来检查对象是否真的相同,如果相同,则 HashSet 就不会让重复对象加入 HashSet ,这样就保证了元素不重复...HashSet 保证元素不重复是利用 HashMap put 方法实现存储之前先根据 key hashCode 和 equals 判断是否已存在,如果存在就不在重复插入了,这样就保证了元素不重复

1.1K20

java菜鸟教程+视频笔记

、实例变量具有默认。...简化性 多态存在三个必要条件 继承 重写 父类引用指向子类对象 比如:Animal ad=new Dog(); 30、虚方法 当使用多态方式调用方法时,首先检查父类是否有该方法,如果没有,则编译错误...List接口存储一组不唯一(可重复)、有序(存储空间连续)(插入顺序)对象; Set接口存储一组唯一,无序对象 Map接口存储一组键值对象,提供keyvalue映射; 37.2、ArrayList...采用对象equals()方法比较两个对象是否相等,即时候指向是同一个对象;若返回是True,则后面的会覆盖掉前面的!...注意:Stringequals是比较两个字符串内容(可以是分别new是否一样,可能是两个引用,String类重写过equals方法,只要字符串一样,则认为是一个对象,set就会只加一个!

1.1K10
领券