IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> JAVA面试题及详解__容器 -> 正文阅读

[数据结构与算法]JAVA面试题及详解__容器

1.java 容器都有哪些?

key:

Collection接口下的List,set,Queue和Map

其中Map是独立的不是在Collection接口下

Queue是队列

2.Collection 和 Collections 有什么区别?

key:

Collection是一个集合接口,它提供了对集合对象进行基本操作的通用接口,所有集合都是他的子类

Collections是一个包装类,包括很多静态方法,不能被实例化,就像一个工具类

3.List、Set、Map 之间的区别是什么?

key:

List:?1.允许重复对象 2.可以插入多个null 3.是一个有序容器,保持每个袁术的插入顺序,输出顺序就是插入的顺序? ? ?//常用的实现类有ArrayList,LinkedList和Vector。

set: 1.不允许重复对象 2.无序容器,无法保证每个元素的储存顺序 3.只允许一个null

//set最常用的实现类有 HashSet,LinkedHashSet以及TreeSet

Map:?1.Map的每个Entry都持有两个对象,一个为key一个为value即键跟值。Map可以有两个相同value但是key的对象是唯一的不会有重复的key

2.Map里可以有多个为null的value但是只能有一个为null的key

//Map里常用的实现类有HashMap.LinkedHashMap,Hashtable,TreeMap

4.HashMap 和 Hashtable 有什么区别?

key:

1.HashTable的方法是同步的,HashMap不能同步

2.HashTable是继承自Dictionaty类,而HashMap是继承自AbstractMap类

3.HashTable不允许null值,HashMap允许使用null值

5.如何决定使用 HashMap 还是 TreeMap?

key:

TreeMap的实现基于红黑树结构。适用于按自然顺序或自定义顺序遍历key(键)

HashMap的数据结构主要是桶(数组),链表或红黑树。适用雨在Map中插入,删除和定位元素

结论:如果你需要得到一个有序的结果就应该使用TreeMap。除此之外HashMap有更好的性能,所以不需要排序的时候HashMap

6.说一下 HashMap 的实现原理?

key:

Table数组初始长度:1<<4 2^4=16

Table数组最大长度:1<<30 2^30=1073741824

负载因子:0.75

链表树化阙值:8

红黑树链化阙值:6

最小树化阙值:64

7.说一下 HashSet 的实现原理?

key:

HashSet是基于HashMap实现的,默认构造函数的一个初始容量为16,负载因子为0.75的HashMap。封装一个HashMap对象储存所有的集合元素,所以放入HashSet中的集合元素实际上由HashMap的key来保存,而HashMap的value存储了一个Present,它是一个静态的Object对象

当我们试图把某个类的对象当成 HashMap的 key,或试图将这个类的对象放入 HashSet 中保存时,重写该类的equals(Object obj)方法和 hashCode() 方法很重要,而且这两个方法的返回值必须保持一致:当该类的两个的 hashCode() 返回值相同时,它们通过 equals() 方法比较也应该返回 true。通常来说,所有参与计算 hashCode() 返回值的关键属性,都应该用于作为 equals() 比较的标准。

HashSet的其他操作都是基于HashMap的。

8.ArrayList 和 LinkedList 的区别是什么?

key:

1.ArrayList是动态数据的数据结构实现的,LinkedList是双向链表的数据结构实现的

2.ArrayList比LinledLIst随机访问效率要高,因为LinkedLsit是线性数据,需要从前往后依次查询

3.在增加和删除数据之外LinkedList的效率要比ArrayList效率要高,因为ArrayList每次更改增删会影响其他数据的下标

9.如何实现数组和 List 之间的转换?

方法一

public static void main(String[] args) {
    
    String[] str = new String[]{"hello"};
    
    ArrayLsit list = new ArrayList<String>();
    //用for循环先遍历数组,再存入Lsit
    for(String string : str){

        list.add(string);
};

    
}

方法二

String[] str = new String[]{"hello"};
//直接使用asList方法将数组存入List
ArrayList list = new ArrayList<String>(Array.asList(str));

10.ArrayList 和 Vector 的区别是什么?

key:

ArrayList:线程不安全.线程不同步. 效率高.?

Vector: 线程安全. 线程同步. 效率低

11.Array 和 ArrayList 有何区别?

Array类型的变量在声明的同时必须实例化而ArrayList可以先声明不要立刻实例化

Array只能储存同构的数据而ArrayList课存储异构数据(即类型不相同的数据)

ArrayList的大小是动态的可以在原有的基础上增加空间

12.在 Queue 中 poll()和 remove()有什么区别?

poll()和remcve()都将在不移除的情况下返回头部,但是poll()在队列为空时返回null.而remove会抛出NoSuchElementException异常。

13.哪些集合类是线程安全的?

1.Vector

2.Hashtable

3.ConcurrentHashMap

4.Stack

14.迭代器 Iterator 是什么?

Iterator是可以遍历集合的对象,为各种容器提供接口.

缺点是迭代器需要跟集合成对生成,即没新增一个集合就需要一个新的迭代器生成

15.Iterator 怎么使用?有什么特点?

1.特点?

1.Iterator在遍历元素过程中,有线程修改集合元素会有ConcurrentModificationEception异常

2.Iteratir本身不具有装载数据的功能需要Collection对象使用

3.next()是用游标指向的方式返回下一个元素

?2.常用且简单的用法

  public static <V> void main(String[] args) {
     List<String> list = new ArrayList<String>();
     list.add("程自豪");
     list.add("夏红飞");
     //获取迭代器
     Iterator iterator = list.iterator();
     
     while(iterator.hasNext()){
         String name = (String) iterator.next();//强制转换类型
         System.out.println(name+"sbbbb");
     }

输出结果

?

?

16.Iterator 和 ListIterator 有什么区别?

1.Iterator可以应用于所有的集合,LIstIterator只能应用在List及List子类

2.ListIterator有hasPrevious()和previous()方法,可以实现反向遍历,这是Iterator做不到的

3.ListIterator可以实现对对象的修改,Iterator只能遍历

17.怎么确保一个集合不能被修改?

可以使用 Collections. unmodifiableCollection(Collection c) 方法来创建一个只读集合,这样改变集合的任何操作都会抛出 Java. lang. UnsupportedOperationException 异常。

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章           查看所有文章
加:2021-07-16 22:03:18  更:2021-07-16 22:04:04 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/7 17:14:08-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码