Java基础面试题-集合类

1 Java 集合框架是什么 ? 说出集合框架的⼀些优点 ?
答:每种编程语⾔中都有集合,最初的 Java 版本包含⼏种集合类: Vector Stack HashTable Arrays 。随着集合的⼴泛使⽤,Java1.2 提出了囊括所有集合接⼝和实现类、算法的集合框架。
       在保证线程安全的情况下使⽤泛型和并发集合类,Java 已经经历了很久。集合框架的部分优点如下:
        (1)使⽤核⼼集合类降低开发成本,⽽⾮实现我们⾃⼰的集合类。
        (2)使⽤经过严格测试的集合框架类,代码质量会得到提⾼。
        (3)通过使⽤ JDK 附带的集合类,可以降低代码维护成本。
        (4)复⽤性和可操作性。
2 、集合接⼝的常⻅实现类
1 List 接⼝的实现类
      List接⼝的实现类最常⽤的有 ArrayList LinkedList Vector
        ArrayList类实现了可变的数组,可以根据索引位置对集合进⾏快速的随机访问。
        LinkedList类采⽤链表结构保存对象,便于向集合中插⼊和删除对象,但是如果将元素插⼊到集合的尾部,其实ArrayList 原⽐ LinkedList 快。
        Vector:也是 List 的⼀个常⻅实现类,但是在该类中的⼤多数⽅法都加了 synchronized 关键字,因此相⽐ ArrayList、 LinkedList 集合在多线程访问时是线程的安全的。
2 Set 接⼝的实现类
     Set 接⼝的实现类常⽤的有 HashSet TreeSet LinkedHashSet 。它们的元素都不可重复。
        HashSet:底层是哈希表,遍历元素和添加顺序、⼤⼩顺序⽆关。
        TreeSet:底层是红⿊树,元素按照⼤⼩顺序存储和遍历。
        LinkedHashSet:底层是哈希表 + 双链表,遍历元素可以体现添加时顺序。顺序性是体现和 HashSet 不同之 处。
3 Map 接⼝的实现类
     Map 接⼝的实现类常⽤的有 HashMap LinkedHashMap TreeMap 。它们的 key 都不可重复。这⾥⾯的 key 不 可重复,指的是容器中对于同⼀个 Key 只会存在⼀个。
        HashMap:哈希表,底层是数组 + 链表 + 红⿊树。遍历元素和添加顺序、⼤⼩顺序⽆关。
        LinkedHashMap:哈希表 + 双链表,遍历元素可以体现添加顺序。
        TreeMap:红⿊树,元素按照 key ⼤⼩顺序存储和遍历。
例⼦( example ):
package se.collect.map;
import java.util.*;
import java.util.concurrent.ConcurrentHashMap;

public class MapDemo1 {
    public static void main(String[] args) {
        System.out.println("input 1 : 1 3 : 3 2 : 2 4 : 4 5 :
5");
//HashMap
Map<String, String> hashMap = new HashMap<String, String>();
hashMap.put("1", "1");
hashMap.put("3", "3");
hashMap.put("2", "2");
hashMap.put("4", "4");
hashMap.put("5", "5");
System.out.print("HashMap ");
for (String key : hashMap.keySet()) {
System.out.print(key + " : " + hashMap.get(key) + " ");
 }
System.out.println();

//LinkedHashMap
Map<String, String> linkedHashMap = new LinkedHashMap<String, String>();
linkedHashMap.put("1", "1");
linkedHashMap.put("3", "3");
linkedHashMap.put("2", "2");
linkedHashMap.put("4", "4");
linkedHashMap.put("5", "5");
System.out.print("LinkedHashMap ");
for (String key : linkedHashMap.keySet()) {
System.out.print(key + " : " + linkedHashMap.get(key) + " ");
 }
System.out.println();

//TreeMap
Map<String, String> treeMap = new TreeMap<String, String>();
    treeMap.put("1", "1");
    treeMap.put("3", "3");
    treeMap.put("2", "2");
    treeMap.put("4", "4");
    treeMap.put("5", "5");
    System.out.print("TreeMap ");
    for (String key : treeMap.keySet()) {
        System.out.print(key + " : " + treeMap.get(key) + " ");
     }
    System.out.println();
    }
}
3 List Map 区别 ?
答:在数据结构⽅⾯, List 存储的是单列数据的集合,⽽ Map 存储的是 key value 类型的数据集合。在数据 存储⽅⾯,List 存储的数据是有序且可以重复的,⽽ Map 中存储的数据是⽆序(不同的⼦类也可以保证有序)且 key值不会重复 (value 值可以重复 )。
4 List Map Set 三个接⼝,存取元素时,各有什么特点 ?
        List与 Set 具有相似性,它们都是单列元素的集合,所以,它们有⼀个共同的⽗接⼝,叫 Collection
        Set⾥⾯不允许有重复(即相等)的元素。 Set 取元素时,没法说取第⼏个,只能通过 for 循环或者迭代器逐 ⼀遍历各个元素。
        List表示有先后顺序的集合, 注意,不是那种按年龄、按⼤⼩、按价格之类的排序。当我们多次调⽤ add(Object e)⽅法时,每次加⼊的对象就像⽕⻋站买票有排队顺序⼀样,按先来后到的顺序排序。有时候,也 可以插队,即调⽤add(int index,Object e) ⽅法,就可以指定当前对象在集合中的存放位置。⼀个对象可以被反 复存储进List 中,每调⽤⼀次 add ⽅法,这个对象就被插⼊进集合中⼀次,其实,并不是把这个对象本身存储进 了集合中,⽽是在集合中⽤⼀个索引变量指向这个对象,当这个对象被add 多次时,即相当于集合中有多个索 引指向了这个对象。List 除了通过迭代器逐⼀遍历各个元素,还可以调⽤ get(index i) 来明确说明取第⼏个。
        Map与 List Set 不同,它是双列的集合,⽤ put ⽅法存储⼀对 key/value ,不能存储重复的 key 。取则可以根 据key 获得相应的 value ,即 get(Object key) 返回值为 key 所对应的 value 。另外,也可以获得所有的 key 的集合 (map.keySet()),还可以获得所有的 value 的结合 (map.values()) ,还可以获得 key value 组合成的 Map.Entry 对象的 集合(map.entrySet())
5 、为什么 Map 接⼝不继承 Collection 接⼝ ?
⾸先 Map 提供的是键值对映射(即 Key value 的映射),⽽ collection 提供的是⼀组数据(并不是键值对映射)。
其次如果 map 继承了 collection 接⼝,那么所有实现了 map 接⼝的类到底是⽤ map 的键值对映射数据还是⽤ collection的⼀组数据呢(就我们平常所⽤的 hashMap hashTable treeMap 等都是键值对,所以它继承 collection完全没意义),⽽且 map 如果继承了 collection 接⼝的话还违反了⾯向对象的 接⼝分离原则。
  • 13
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值