1、Collection和Collections的差别 java.util.Collection 是一个集合接口,Collection接口在Java类库中有非常多详细的实现。 比如List、Set java.util.Collections 是针对集合类的一个帮助类,它提供了一系列的静态方法实现对各种集合的搜索、排序、线程安全化等操作。 2、ArrayList与Vector的差别 这两个类都实现了List接口(List接口继承自Collection接口)。它们都是有序集合。 (2)、HashMap同意空的key和value HashTable不同意 6、List与Map的差别 List是存储单列数据的集合,Map是存储key和value这样双列数据的集合,List中存储的数据是有顺序的 import java.util.Iterator; import java.util.Set; import java.util.TreeSet; public class TreeSetDemo2
Collection接口的所有子类(直接子类和间接子类)都必须实现2种构造函数:不带参数的构造函数 和 参数为Collection的构造函数。 int size() abstract <T> T[] toArray(T[] array) abstract Object[] toArray() 2. Set是没有重复元素的集合。 集合可以通过Iterator去遍历集合中的元素。Iterator提供的API接口,包括:是否存在下一个元素、获取下一个元素、删除当前元素。 即,当某一个线程A通过iterator去遍历某集合的过程中,若该集合的内容被其他线程所改变了;那么线程A访问集合时,就会抛出ConcurrentModificationException异常,产生fail-fast
Java集合面试题 Java 集合框架的基础接口有哪些? Collection ,为集合层级的根接口。一个集合代表一组对象,这些对象即为它的元素。Java 平台不提供这个接口任何直接的实现。 有哪些关于 Java 集合框架的最佳实践? 基于应用的需求来选择使用正确类型的集合,这对性能来说是非常重要的。 2、如果集合中的元素的数目大于目前集合数组的长度时,在集合中使用数据量比较大的数据,用 Vector 有一定的优势。 这种情况下,使用 LinkedList 更合适。 Hashtable 是在 Java 1.0 的时候创建的,而集合的统一规范命名是在后来的 Java2.0 开始约定的,而当时其他一部分集合类的发布构成了新的集合框架。 Hashtable 继承 Dictionary ,HashMap 继承的是 Java2 出现的 Map 接口。
1. java 集合你了解吗? java 集合最顶层接口是 Collection 和 Map; Collection 有三个核心接口,分别是 List,Set,Queue; List 是有序可重复的,它的主要实现类有 ArrayList 2. 什么是集合的快速失败机制? 集合内部会维护一个 modCount 变量,遍历的时候,会判断 modCount 变量的值是否等于期望值,不等就会报并发修改异常。 3. HashMap (jdk1.8) 数组长度为什么是 2 的 n 次幂? 只有当数组长度为 2 的 n 次幂时,hashCode 值与 (&) 数组长度减一的计算结果才会和 hashCode 值对数组长度取模的计算结果才会一致; 同时 2 的 n 次幂减一的二进制是若干个 1
Java集合框架为Java编程语言的基础,也是Java面试中很重要的一个知识点。这里,我列出了一些关于Java集合的重要问题和答案。 1.Java集合框架是什么?说出一些集合框架的优点? 每种编程语言中都有集合,最初的Java版本包含几种集合类:Vector、Stack、HashTable和Array。随着集合的广泛使用,Java1.2提出了囊括所有集合接口、实现和算法的集合框架。 (3)通过使用JDK附带的集合类,可以降低代码维护成本。 (4)复用性和可操作性。 2.集合框架中的泛型有什么优点? Java1.5引入了泛型,所有的集合接口和实现都大量地使用它。 Java1.5并发包(java.util.concurrent)包含线程安全集合类,允许在迭代时修改集合。 例子2:一个对于数组或列表的线性搜索的性能是O(n),因为我们需要遍历所有的元素来查找需要的元素。 40.与Java集合框架相关的有哪些最好的实践? (1)根据需要选择正确的集合类型。
话接上回,继续Java集合框架的学习,这次主要介绍Map接口。 (it.hasNext()){ //遍历集合 //两种类型(1统一Object类,不用强转.2强转:String key=(String) it.next(); :"+name); } } 运行结果 name集合:{1=zhangsan, 2=lishi, 3=wangwu, 4=zhaoliu} 添加name1集合中所有键值对后的name集合:{1=zhangsan , 2=lishi, 3=wangwu, 4=zhaoliu, 5=xiaoming, 6=wangba} name集合的大小:6 获取name集合中键为4对应的值:zhaoliu 删除name集合中键为 4对应键值对后的name集合:{1=zhangsan, 2=lishi, 3=wangwu, 5=xiaoming, 6=wangba} 清空name集合:{} 三、TreeMap(了解) 1、概述
java集合类面试题 1.请聊一下java的集合类,以及在实际项目中你是如何用的? 注意说出集合体系,常用类,接口,实现类 加上你所知道的高并发集合类,JUC 在实际项目中引用,照实说就好了 2.集合类是怎么解决高并发中的问题? 线程非全的集合类ArrayList LinkedList HashSet TreeSet HashMap TreeMap 实际开发中我们自己用这样的集合最多,因为一般我们自己写的业务代码中,不太涉及到多线程共享同一个集合的问题 9.集合和数组的区别 10.Java集合的快速失败机制 “fail-fast”? 11.遍历一个 List 有哪些不同的方式?每种方法的实现原理是什么? 12.HashSet如何检查重复? 18.哪些集合类是线程安全的?哪些不安全? 19.讲讲红黑树的特点? 20.怎么确保一个集合不能被修改?
2,不同点: 父类不同:HashMap 继承了 AbstractMap 类,而 HashTable 继承了 Dictionary 类。 初始容量不同:HashTable 的初始长度是11,之后每次扩充容量变为之前的 2n+1(n为上一次的长度)而 HashMap 的初始长度为16,之后每次扩充变为原来的两倍。 创建时,如果给定了容量初始值,那么HashTable 会直接使用你给定的大小,而 HashMap 会将其扩充为2的幂次方大小。
import java.util.Hashtable; import java.util.Iterator; import java.util.Map; import java.util.Set Map<Integer,String> map = new Hashtable<Integer, String>(); map.put(3,"倚天屠龙记"); map.put(2, me = iter.next(); System.out.println(me.getKey()+","+me.getValue()); } } } 面试题 :现在在一个List集合之中保存了多个String对象,要求将这个List集合变为Set集合,而后再将这个Set集合之中的全部数据保存在Map集合的value里面,而Map集合的key使用UUID生成, ; import java.util.List; import java.util.Map; import java.util.Set; import java.util.UUID; public
用途与特点 可用于在需要存储有序的,可动态扩充集合大小的情况使用。可以看做是一个动态的数组。虽然该集合理论上是可以动态无限扩充,但也有最大长度限制。 默认初始数组长度是10,最大集合长度是Integer.MAX_VALUE大概21亿多 添加 ? 删除 ? 在删除数据时只会对数组进行移到操作,并不会修改调整数组的长度,所以对于内存方面如创建一个长度是100的数据集合,删除了90个数据,集合数组长度也不会缩小。 work return oldValue; } 扩容机制 扩容时机:是在加入数据时,elementData已满时进行扩容 扩充的新数组长度是: 原数组长度 + (原数组长度 / 2)
Java 中的拷贝 由于java中只有值传递,u2 = u1,拿到的是u1的地址,u2和u1指向的是同一个内存区域,u1改变值,u2也会改变。 UseCloneable u1 = new UseCloneable(); UseCloneable u2 = u1; u1.a = 10; 那么我们怎么构造一个新的对象呢 u2 = new UseCloneable(); u2.a = u1.a; 但是如果有20个30个字段,这么写就比较臃肿。 : com.example.miccommon.collection.UseCloneable at java.lang.Object.clone(Native Method) at com.example.miccommon.collection.UseCloneable.main (UseCloneable.java:16) 实现接口实现拷贝过程 @Data public class UseCloneable implements Cloneable { private int
其实在看Java源码的时候,作者的很多意图都很费人心思,我能知道他的目标是啥,但是不知道他为何这样写。 2、判断集合的长度s是否等于数组的长度(如果集合的长度已经等于数组的长度了,说明数组已经满了,该重新分配新数组了),重新分配数组的时候需要计算新分配内存的空间大小,如果当前的长度小于MIN_CAPACITY INCREMENT/2 (这个常量值是12,除以2就是6,也就是如果当前集合长度小于6)则分配12个长度,如果集合长度大于6则分配当前长度s的一半长度。 ,键对象不可以重复,值对象可以重复; Set集合中的对象不按照特定的方式排序,并且没有重复对象,但它的实现类能对集合中的对象按照特定的方式排序,例如TreeSet类,可以按照默认顺序,也可以通过实现Java.util.Comparator Java 中ArrayList和Linkedlist区别?
1、 你都知道哪些常用的Map集合2、Collection集合接口和Map接口有什么关系? 3、HashMap是线程安全的吗?线程安全的Map都有哪些?性能最好的是哪个?
版本之后的获取头,获取尾 List接口特有方法 增 add(index,element) 在指定索引的位置上插入元素 addAll(index,Collection) 在指定的引的位置上插入整个集合的元素 addAll(Collection) 在结束插入整个集合的元素 删 remove(index) 改 set(index,element) 使用element替换指定索引位置上的元素 查
1.2 ArrayDeque源码(基于JDK1.7.0_45) 值得一提的是,Java中有一个类叫做Stack,该类实现了栈结构。 但是,Java已经不提倡Stack来实现栈结构,而是建议使用ArrayDeque类; 来自Stack类描述: A more complete and consistent set of LIFO stack tail; //最小初始化容量值: private static final int MIN_INITIAL_CAPACITY = 8; //扩大数组的长度:扩大为原有长度的2倍 ArrayDeque中,底层主要利用addFirst/removeFirst实现元素的出栈和入栈操作; 1.3 LinkedList源码(基于JDK1.7.0_45) LinkedList即有List集合方法 ,又有Deque集合方法。
Java集合常见面试题汇总 1. 、元素内容不允许重复; Map集合: (1) Map以键值对形式存储(key-value)。 (2) 键:无序、无下标、元素不允许重复(唯一)。 (3) 值:无序、无下标、元素内容允许重复。 2. 写出 ArrayList 和 Vector的区别 a. 执行原理:当一个对象往 HashSet集合中存储时,先调用当前对象的 hashCode方法,获取对应存储下标(为了保证内容相同的对象不添加 到HashSet集合中,通常将 hashCode方法给与覆盖 简述 Java中集合框架
(2)数据增长: ArrayList与Vector都有一个初始的容量大小,当存储进它们里面的元素的个数超过了容量时,就需要增加ArrayList与Vector的存储空间,每次要增加存储空间时 2、HashMap和Hashtable的区别 HashMap是Hashtable的轻量级实现(非线程安全的实现),他们都完成了Map接口,主要区别在于HashMap允许空(null)键值(key),由于非线程安全 Hashtable继承自Dictionary类,而HashMap是Java1.2引进的Map interface的一个实现。 就HashMap与HashTable主要从三方面来说: 一.历史原因:Hashtable是基于陈旧的Dictionary类的,HashMap是Java 1.2引进的Map接口的一个实现 map可以返回三个集合,一个是返回所有的key的集合,另外一个返回的是所有value的集合,再一个返回的key和value组合成的EntrySet对象的集合. map也有get方法,参数是key,返回值是
1、介绍Collection框架的结构 集合是Java中的一个非常重要的一个知识点,主要分为List、Set、Map、Queue三大数据结构。 它们在Java中的结构关系如下: Collection接口是List、Set、Queue的父级接口。 Set接口有两个常用的实现类:HashSet和TreeSet。 第二种,创建一个外部比较器,这个外部比较器要实现Comparator接口的 compare(T t1, T t2)。 { if (o1.getAge() > o2.getAge()) { return 1; }else if (o1.getAge() == o2 它们的不同点主要在三个方面: 第一,Hashtable是Java1.1的一个类,它基于陈旧的Dictionary类。而HashMap是Java1.2引进的Map接口的一个实现。
剖析面试最常见问题之 Java 集合框架 1.1. 集合概述 1.1.1. Java 集合概览 1.1.2. 说说 List,Set,Map 三者的区别? 1.1.3. 剖析面试最常见问题之 Java 集合框架 1.1. 集合概述 1.1.1. Java 集合概览 从下图可以看出,在 Java 中除了以 Map 结尾的类之外, 其他类都实现了 Collection 接口。 并且,以 Map 结尾的类都实现了 Map 接口。 ? 1.1.2. 但是集合提高了数据存储的灵活性,Java 集合不仅可以用来存储不同类型不同数量的对象,还可以保存具有映射关系的数据。 1.2. Collection 子接口之 List 1.2.1. obj)方法用来排序 comparator接口实际上是出自 java.util 包它有一个compare(Object obj1, Object obj2)方法用来排序 一般我们需要对一个集合使用自定义排序时
1 HashMap概要 HashMap继承关系如下: java.lang.Object ↳ java.util.AbstractMap<K, V> ↳ java.util.HashMap 2 构造函数 // 默认构造函数。 static final int DEFAULT_INITIAL_CAPACITY = 16; // 最大容量(必须是2的幂且小于2的30次方,传入容量过大将被这个值替换) static ks : (keySet = new KeySet())); } // Key对应的集合 // KeySet继承于AbstractSet,说明该集合中没有重复的Key。 es : (entrySet = new EntrySet()); } // EntrySet对应的集合 // EntrySet继承于AbstractSet,说明该集合中没有重复的