当前位置:网站首页>容器学习中的简答题
容器学习中的简答题
2022-07-21 13:16:00 【王小小鸭】
list集合基础,练习练习
1.请说明java集合的继承结构图
形式如下: A |\ B C | \ E F....... 集合 / \ / \ / \ Collection单列 Map双列 / \ / \ / \ / \ / \ / \ List可重复 Set不可重复 HashMap …… / \ / \ / \ / \ / \ / \ Arraylist Linkedlist HashSet TreeSet
2.ArrayList,LinkedList,Vector三者的相同点与不同点?(“Vector”可百度)【面试题】
相同点
三个类都实现了List接口,存储数据的形式特点相同,都是存储可重复的有序的数据。
不同点
1.List接口存储的都是有序可重复的数据,但是细分又可以划分出ArrayList,LinkedList,Vector三个类。
2.ArrayList类主要是实现类,虽然效率高,但是线程不安全。底层用的是Object[]数组存储。从查找的时间复杂度来说它属于O(1)。删除元素的时间复杂度O(n)。
3.LinkedList类主要是用于频繁插入,删除操作,当然它的效率比ArrayList高,所以它的线程安全程度比ArrayList更低,底层使用的是双向链表存储。从查找的时间复杂度来说属于O(n)。插入删除的时间复杂度属于O(1)。
4.Vector类 是在 java 中可以实现自动增长的对象数组,属于比较古老的一种类,效率比较低,反之线程比较安全,底层使用的是Object[]数组存储。
3.List 接口的常用方法有哪些?(增、删、改、查、插、长度、遍历等)
List<String> list=new ArrayList<>();
增
list.add("a"); list.add("b"); list.add("c"); list.add("d")
删
String removeE=list.remove(2); System.out.println("删除的元素是:"+removeE);
改
String setE=list.set(1,"A"); System.out.println("更改的元素是:"+setE);
查
System.out.println(list.get(3));
// 查看元素下标值 System.out.println(list.indexOf("lisi")); System.out.println(list.lastIndexOf("zhangsan")); System.out.println(list);
插
E remove(int index) 删除指定索引处的元素,返回被删除的元素
长度
int size() 集合的长度,也就是集合中元素的个数
遍历
// iterator迭代器:集合特有的遍历方式 Iterator<Student> it = list.iterator(); while (it.hasNext()) { Student s = it.next(); System.out.println(s.getName() + "," + s.getAge()); } System.out.println("-----------------------"); // 普通for:带有索引的遍历方式 for (int i = 0; i < list.size(); i++) { Student s = list.get(i); System.out.println(s.getName() + "," + s.getAge()); } System.out.println("-----------------------"); // 增强for:最方便的遍历方式 for (Student s : list) { System.out.println(s.getName() + "," + s.getAge()); } System.out.println("-----------------------");
4.如何使用Iterator和增强for循环遍历List。举例说明
```java
// iterator迭代器:集合特有的遍历方式
Iterator<Student> it = list.iterator();
while (it.hasNext()) {
Student s = it.next();
System.out.println(s.getName() + "," + s.getAge());
}
System.out.println("-----------------------");
// 增强for:最方便的遍历方式
for (Student s : list) {
System.out.println(s.getName() + "," + s.getAge());
}
System.out.println("-----------------------");
```
set集合基础,练习练习
1.请说明set接口的特点?
无序性和数据元素的唯一性
2.set接口的实现类有哪些?他们的底层实现是什么?分别有什么特点?
HashSet和他的子类LinkedSet,TreeSet。
HashSet和LinkedSet底层使用了哈希表和链表来支持的。
TreeSet底层使用TreeMap
共同特点:
不能使用普通for循环遍历,能通过迭代器或增强for循环遍历;由于是Set集合,所以是不包含重复元素的集合
不同点:
HashSet不保证存储和取出的元素顺序一致;
LinkedSet具有可预测的迭代次序,元素具有唯一性。
TreeSet元素有序,可以按照一定的规则进行排序,具体排序方式取决于构造方法
3.TreeSet的排序方式有哪两种?
TreeSet():根据其元素的自然排序进行排序。(Comparable接口,重写compareTo(Object obj)的抽象方法)
要求自定义类实现java.lang.Comparable接口并重写其compareTo(Object obj)的抽象方法在此方法中,指明按照自定义类的哪个属性进行排序。向TreeSet中添加元素时,首先按照compareTo()进行比较,一旦返回0,虽然仅是两个对象的此属性值相同,但是程序会认为这两个对象是相同的,进而后一个对象就不能添加进来。因此要求compareTo()与hashCode()以及equals()三者保持一致! TreeSet的两种排序方式:自然排序和定制排序_959的技术博客_51CTO博客
TreeSet(Comparator comparator) :根据指定的比较器进行排序(测试类中实现)
创建一个实现了Comparator接口类的对象
Map集合基础,练习
Map存储数据的特点是什么?
键值对映射关系
一个键对应一个值
键不能重复,值可以重复
元素存取无序
描述HashMap的底层实现原理(jdk 8版)?
数组+链表+红黑树 见http://t.csdn.cn/C3JAs
Map中常用实现类有哪些?各自有什么特点?
HashSet,TreeMap,Hashtable以及LinkedHashMap等。
其中这四者的区别如下(简单介绍):
最常用的Map,HashMap的值是没有顺序的,他是按照key的HashCode来实现的,就是根据key的HashCode 值来存储数据,根据key可以直接获取它的Value,同时它具有很快的访问速度。HashMap最多只允许一条记录的key值为Null(多条会覆盖);允许多条记录的Value为 Null。非同步的。
TreeMap: 能够把它保存的记录根据key排序,默认是按升序排序,也可以指定排序的比较器,当用Iterator 遍历TreeMap时,得到的记录是排过序的。TreeMap不允许key的值为null。非同步的。
Hashtable: 与 HashMap类似,不同的是:key和value的值均不允许为null;它支持线程的同步,即任一时刻只有一个线程能写Hashtable,因此也导致了Hashtale在写入时会比较慢,只有hashtable是继承自Dictionary抽象类的,hashMap和treeMap都继承自AbstractMap抽象类,LinkedHashMap继承自hashMap。
LinkedHashMap: 保存了记录的插入顺序,在用Iterator遍历LinkedHashMap时,先得到的记录肯定是先插入的.在遍历的时候会比HashMap慢。key和value均允许为空,非同步的。
边栏推荐
- 【开发教程7】疯壳·ARM功能手机-BLE透传实验教程
- 牛客刷题篇
- 【微信小程序】WXSS和全局、页面配置入门砖
- Detailed explanation of file upload basis
- Summary of recommendation system papers
- ES6 从入门到精通 # 06:箭头函数 this 指向和注意事项
- Leetcode-153- find the minimum value in the rotation sort array
- How emqx 5.0 under the new architecture of mria + rlog realizes 100million mqtt connections
- js正则校验只能存在数字和小数点
- mysql 库、表增删改
猜你喜欢
Butterknife Library (an efficient tool library, Xiaobai only records one usage - no in-depth study, hee hee)
【精选】表情包斗图小程序(可引流,开通流量主,权益外卖cps,带pc后台管理)
unity的静态设置以及烘培属性
[chestnut sugar GIS] ArcMap - how to quickly generate the four directions information
[chestnut sugar GIS] bat - how to delete data with the same suffix under subfolders
[chestnut sugar GIS] how do individual users of Tencent conference change their names
Windows cannot start the mysql80 service (located on the local computer)
unity URP前向渲染流程以及获取屏幕空间UV和深度
Navicat import SQL script file
牛客刷题篇
随机推荐
C language student achievement management system
Exclusive interview with sportlive Li Ying: how to use Web3 to promote sports IP to expand the "new business territory"
Common operations of windows10 system
LeetCode·每日一题·814.二叉树剪枝·递归
ES6 从入门到精通 # 03:模板字符串
请写一个函数,将列表中所有字符串类型元素中的'abc'替换为'BCD'【杭州多测师】【杭州多测师_王sir】...
py文件的运行
Windows无法启动MySQL80服务(位于本地计算机)
Write bootloader from 0 - bootloader relocates app
如何清理C盘
Several problems faced by long-term remote work and continuous improvement of organizational automation
2022.7.9 summer personal training 1-c Clean up the Powers that Be
2.3.1 View绘制流程
Yousi College | learn six sigma management from Sun Tzu's art of war
PL/SQL 异常
How to drive growth strategy with innovation
Unity URP forward rendering process and obtaining screen space UVs and depth
2022.7.9暑假个人训练1-B.How old are you Mr. String
Tensorflow introductory tutorial (34) -- two types of image segmentation loss functions commonly used
Butterknife Library (an efficient tool library, Xiaobai only records one usage - no in-depth study, hee hee)