Skip to content

Java 的基本数据类型,集合类型?

约 831 字大约 3 分钟

Java基础字节

2025-03-20

⭐ 题目日期:

字节 - 2024/12/10

📝 题解:

Java 的基本数据类型

Java 有 8 种基本数据类型,分为四类:

类别类型位数默认值范围/说明
整数型byte80-128 ~ 127
short160-32768 ~ 32767
int320-2^31 ~ 2^31-1
long640L-2^63 ~ 2^63-1
浮点型float320.0f单精度,需后缀 f(如 3.14f
double640.0d双精度,默认浮点类型
字符型char16'\u0000'单个 Unicode 字符(如 'A'
布尔型boolean-falsetrue/false

注意:基本数据类型的变量直接存储值,而非对象。在集合中需使用对应的包装类(如 IntegerDouble)。


Java 的集合类型(Collection Framework)

Java 集合框架分为 CollectionMap 两大类:

1. Collection 接口(单元素集合)

  • List(有序,可重复)
    • ArrayList:基于动态数组,查询快(O(1)),增删慢。
    • LinkedList:基于双向链表,增删快(O(1)),查询慢(O(n))。
    • Vector:线程安全的动态数组(已过时,可用 CopyOnWriteArrayList 替代)。
  • Set(无序,不可重复)
    • HashSet:基于哈希表,快速插入和查询(O(1))。
    • LinkedHashSet:保持插入顺序的 HashSet
    • TreeSet:基于红黑树,元素按自然顺序或自定义顺序排序(O(log n))。
  • Queue(队列)
    • LinkedList:可作普通队列或双端队列(Deque)。
    • PriorityQueue:基于堆的优先级队列。

2. Map 接口(键值对集合)

  • HashMap:基于哈希表,键无序,允许 null 键/值(非线程安全)。
  • LinkedHashMap:保持插入顺序的 HashMap
  • TreeMap:基于红黑树,键按自然顺序或自定义顺序排序。
  • Hashtable:线程安全的哈希表(已过时,建议用 ConcurrentHashMap)。

3. 线程安全集合

  • ConcurrentHashMap:分段锁实现的线程安全 HashMap
  • CopyOnWriteArrayList:写时复制的线程安全 List
  • BlockingQueue:支持阻塞操作的线程安全队列(如 ArrayBlockingQueue)。

示例代码

// 基本数据类型
int num = 10;
double price = 9.99;
char grade = 'A';

// 集合示例
List<String> list = new ArrayList<>();
list.add("Java");

Set<Integer> set = new HashSet<>();
set.add(100);

Map<String, Integer> map = new HashMap<>();
map.put("age", 25);

Queue<String> queue = new LinkedList<>();
queue.offer("task1");

关键区别

  • 数组 vs 集合:数组大小固定,集合动态扩容。
  • List vs Set:List 允许重复和顺序访问,Set 去重。
  • HashMap vs TreeMap:HashMap 基于哈希表(无序),TreeMap 有序。

提示:根据场景选择数据结构。例如,高频查询用 ArrayList,去重用 HashSet,排序用 TreeSet,线程安全用 ConcurrentHashMap


面试高频问题扩展

  1. HashMap vs. Hashtable
    • HashMap 非线程安全,Hashtable 线程安全(方法加 synchronized)。
    • HashMap 允许 null 键值,Hashtable 不允许。
  2. ArrayList vs. LinkedList
    • 随机访问:ArrayList 更快(数组索引);增删操作:LinkedList 更快(指针操作)。
  3. ConcurrentHashMap 如何保证线程安全?
    • JDK 1.7:分段锁(Segment),减少锁竞争。
    • JDK 1.8:CAS + synchronized 锁单个桶(Node)。
  4. 集合的 fail-fast 机制
    • 迭代时检测到结构性修改(如并发修改),抛出 ConcurrentModificationException
  5. 如何选择集合类型?
    • 查询多:ArrayList、HashMap;增删多:LinkedList、LinkedHashMap;排序需求:TreeSet、TreeMap。

总结

  • 基本数据类型:关注内存占用、范围及默认值。
  • 集合类型:掌握底层实现、线程安全、适用场景及性能差异。
  • 面试核心:结合源码理解设计原理(如 HashMap 的哈希冲突解决、ConcurrentHashMap 的分段锁机制)。