1人参与 • 2025-10-25 • Java
java jdk(java development kit)内置了大量封装良好的数据结构,主要集中在 java.util 包。这些数据结构将数据的存储方式与具体操作方法封装在一起,隐藏实现细节,只暴露必要的接口给开发者使用。它们是 java 集合框架的核心。
arraylist、linkedlistobject[] elementdata(arraylist)add(), get(), remove() 等方法源码片段(arraylist):
public class arraylist<e> extends abstractlist<e> implements list<e> {
private object[] elementdata;
private int size;
public boolean add(e e) { /* ... */ }
public e get(int index) { /* ... */ }
// ...
}hashset、treesethashset 内部实际是 hashmaphashmap<e, object> mapadd(), contains(), remove() 等方法源码片段(hashset):
public class hashset<e> extends abstractset<e> implements set<e> {
private transient hashmap<e,object> map;
private static final object present = new object();
public boolean add(e e) { return map.put(e, present)==null; }
// ...
}hashmap、treemap、linkedhashmapnode<k,v>[] table(hashmap)put(), get(), remove() 等方法源码片段(hashmap):
public class hashmap<k,v> extends abstractmap<k,v> implements map<k,v> {
transient node<k,v>[] table;
transient int size;
public v put(k key, v value) { /* ... */ }
public v get(object key) { /* ... */ }
// ...
}linkedlist、arraydeque、priorityqueuenode<e> first, last(linkedlist)offer(), poll(), peek() 等方法源码片段(linkedlist):
public class linkedlist<e> extends abstractsequentiallist<e> implements list<e>, deque<e> {
transient node<e> first;
transient node<e> last;
public boolean offer(e e) { /* ... */ }
public e poll() { /* ... */ }
// ...
}stack 类(已不推荐,建议用 deque 代替)vectorpush(), pop(), peek() 等方法以 arraylist 为例:
elementdata(数组),size(元素数量)add, get, remove 等方法代码list<string> names = new arraylist<>();
names.add("alice");
names.add("bob");
system.out.println(names.get(0)); // 输出 alice
set<integer> set = new hashset<>();
set.add(1); set.add(2); set.add(1);
system.out.println(set.size()); // 输出 2(去重)
map<string, integer> map = new hashmap<>();
map.put("a", 100); map.put("b", 200);
system.out.println(map.get("b")); // 输出 200arraylist.java、hashmap.java)深入理解其封装细节。java jdk 封装的数据结构通过类与接口,将数据存储与操作方法严密结合,隐藏内部实现,保证安全和易用性,是高质量软件开发的基础。
elementdata 数组初始容量有限,超出后自动扩容(通常扩容为原来的1.5倍)。源码片段:
public boolean add(e e) {
ensurecapacityinternal(size + 1); // 自动扩容
elementdata[size++] = e;
modcount++;
return true;
}源码片段:
final v putval(int hash, k key, v value, boolean onlyifabsent, boolean evict) {
node<k,v>[] tab; node<k,v> p; int n, i;
// 1. 初始化或扩容
// 2. 计算 hash
// 3. 插入或更新节点
// 4. 冲突时链表或树化
}源码片段:
private static class node<e> {
e item;
node<e> next;
node<e> prev;
}集合框架通过工厂方法(如 collections.unmodifiablelist())封装创建不同类型的数据结构实例。
所有集合都实现了 iterator 接口,封装遍历细节,支持 foreach、流式操作等。
通过 collections.synchronizedlist(list)、collections.unmodifiableset(set) 等方法实现线程安全或只读集合,封装原始集合,增强功能。
所有集合都通过泛型类型参数 <e> 或 <k, v> 封装数据类型,保证类型安全,避免强制类型转换。
list、set、map 等接口定义操作规范,具体实现类封装细节。jdk 提供了专门的并发数据结构,封装了线程安全机制:
arrayblockingqueue、linkedblockingqueuecollections 和 arrays 提供大量静态方法,封装常用操作,如排序、查找、同步、只读包装等:
list<integer> list = arrays.aslist(1, 2, 3); collections.sort(list); list<integer> synclist = collections.synchronizedlist(list);
list<string> readonly = collections.unmodifiablelist(new arraylist<>());
map<string, object> concurrentmap = new concurrenthashmap<>();
public class mystack<e> {
private linkedlist<e> list = new linkedlist<>();
public void push(e e) { list.addfirst(e); }
public e pop() { return list.removefirst(); }
}java jdk 封装的数据结构不仅隐藏了复杂的存储和操作细节,还通过设计模式、泛型、异常机制等保证了安全性、扩展性和高性能。开发者只需关注接口和方法,无需关心底层实现,大大提升了开发效率和代码质量。
到此这篇关于java jdk封装数据结构详解的文章就介绍到这了,更多相关java jdk封装数据结构内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
您想发表意见!!点此发布评论
版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。
发表评论