Java的集合框架大致可以分为四个体系
:List/Set/Queue/Map。其中List/Set/Queue来自Collection根接口,Map来自Map根接口。
注意:Iterator迭代Collection集合
,迭代过程中,避免对collection更改,除非通过Iterator删除(remove),否则会抛出并发修改异常。
Set
存放不重复的元素,并且存放是无序的(即不会保留元素add的顺序)。
set如何判断两个元素是否相同:equals()
HashSet
:采用hash算法
(元素的值-->hash值-->位置-->更快地存取)存取元素。
HashSet如何判断两个元素是否相同:equals() + hashCode()
。
注意:如果需要将一个对象放入HashSet,则要重写该对象对应类的equals()和hashCode()。
如何重写hashCode()?
http://nemogu.iteye.com/admin/blogs/1199521
注意:当向HashSet中添加可变对象时要额外注意,如果修改集合中的对象,有可能导致该对象与集合中其他对象相等,从而导致hashset无法准确访问该对象。
Set--SortedSet--TreeSet
TreeSet
:红黑树。集合元素根据其实际值处于排序状态。自然排序(元素类实现Comparable接口)和定制排序(TreeSet构造时传入一个Comparator)。
LinkedList
:双向队列+栈(pop/push)+list(按索引随机访问元素),底层用链表存储元素,随机访问性能低于ArrayList和Vector,但是迭代,插入和删除性能要高于其他。
Map
HashMap
:非线程安全,null可以作为key或者value。
判断key相等:equals返回true,hashCode相等。
LinkedHashMap
:以双向链表维护元素插入的顺序。
Map--SortedMap--TreeMap
TreeMap
:红黑树对key排序。
WeakHashMap
与HashMap:WeakHashMap的key对象保存了实际对象的弱引用。意味着key所引用的对象没有被其他强引用变量所引用,这些key所引用的对象会被gc回收。
工具类Collections
:
Collections.synchronizedMap(Map)
<Long, String> Map<Long, String> java.util.Collections.synchronizedMap(Map<Long, String> m)
Returns a synchronized (thread-safe) map backed by the specified map. In
order to guarantee serial access, it is critical that all
access to the backing map is accomplished through the returned map.
It is imperative that the user manually synchronize on the returned map when
iterating over any of its collection views:
Map m = Collections.synchronizedMap(new HashMap());
...
Set s = m.keySet(); // Needn't be in synchronized block
...
synchronized(m) { // Synchronizing on m, not s!
Iterator i = s.iterator(); // Must be in synchronized block
while (i.hasNext())
foo(i.next());
}
ConcurrentHashMap
分享到:
相关推荐
6. **集合框架**:深入解析了Java集合接口和类,如List、Set、Map以及它们的实现,包括ArrayList、LinkedList、HashSet、HashMap等。 7. **泛型**:介绍了Java 5引入的泛型特性,如何使用泛型来增强类型安全性和...
5. **集合框架**:Java集合框架是处理对象集合的核心工具,包括List、Set、Queue、Map等各种接口及其实现。书中详细讲解了这些接口的使用和性能考虑,如ArrayList、LinkedList、HashSet、HashMap等,以及高级特性如`...
3. **高级集合框架**:Java集合框架是存储和操作对象的关键,书中深入解析了List、Set、Queue、Map接口及其实现类,如ArrayList、LinkedList、HashSet、TreeSet、HashMap、ConcurrentHashMap等,还涵盖了泛型、枚举...
这些类和方法涵盖了字符串处理、数组操作、集合框架、输入/输出操作、网络编程、安全机制等多个领域。 在 Java 平台标准版核心库中,有许多重要的类和接口,它们是 Java 应用程序的基础。例如,java.lang.Object 是...
本资料"Java制作二维码.zip"显然是一个关于使用Java编程语言制作二维码的教程或示例代码集合,它可能包含必要的依赖库和示例代码,帮助开发者理解并实践这个功能。 首先,我们来看一下关键的标签:"Java","二维码...
它提供了丰富的API,包括集合框架、I/O流、多线程、网络编程、数据库连接(JDBC)、XML处理、GUI组件等,覆盖了软件开发的各个方面。 API(Application Programming Interface)文档是程序员在使用特定库或框架时的...
新的`java.time`包替代了之前的`java.util.Date`和`java.util.Calendar`,提供了更强大、更易用的类,如`LocalDate`、`LocalTime`和`LocalDateTime`等。这些类使得处理日期和时间变得更为直观,减少了出错的可能性。...
3. **标准类库(java.*和javax.*)**: 这些是Java语言的核心API,包括集合框架、I/O流、网络编程、多线程、反射等基础功能。 4. **开发工具(Ant、Maven、Gradle)**: 这些是Java项目构建工具,用于自动化构建、...
- **Spring框架**:Spring的核心库(spring-core.jar)和其他模块如Spring MVC、Spring Data和Spring Security,广泛用于企业级Java应用开发,提供依赖注入、AOP(面向切面编程)等功能。 - **Log4j或Logback**:...
2. **集合框架**:Java的集合框架是其强大功能的一部分,包括`List`, `Set`, `Map`接口以及它们的实现类如`ArrayList`, `HashSet`, `HashMap`等。源代码中会有各种操作集合的实例,如添加、删除、遍历、排序等,还会...
- `java.util`提供了算法、数据结构、集合框架、日期时间等工具类。 - `java.sql`和`javax.sql`用于数据库操作。 12. **数值类型转换** - Java中有严格的数值类型转换规则,包括自动类型提升和显式类型转换。...
4. **容器和集合框架**:详述ArrayList、LinkedList、HashSet、HashMap等集合类的使用,以及泛型、迭代器和枚举的概念。 5. **输入/输出流**:涵盖文件操作、数据流、序列化和对象的持久化。 6. **字符串和正则...
1. 核心Java:包括Java语言基础、面向对象编程概念、Java类库、异常处理、集合框架、输入输出(I/O)操作、多线程和网络编程等。 2. Java SE(标准版):Java SE是Java的核心平台,为Java EE(企业版)和Java ME...
这本书专注于Java集合框架,详细解释了ArrayList、LinkedList、HashSet、HashMap等各种集合类的使用和实现。通过阅读这本书,你可以理解如何有效地使用Java Collections API,并且有机会接触到设计模式,比如迭代器...
3. **改进的集合框架**:添加了`java.util.concurrent`包,包含了并发工具类,如`ExecutorService`、`Future`和`BlockingQueue`,为多线程编程提供了强大支持。 4. **自动资源管理**:引入了try-with-resources语句...
2. **类库(Core Libraries)**:Java类库提供了大量的基础功能,如集合框架、多线程、网络通信、I/O操作等。例如,`java.util`包包含了ArrayList、HashMap等常用数据结构;`java.io`包提供了文件读写和流处理的功能...
3. **集合框架**:Java的集合框架是其库的核心部分,包括List、Set、Map等接口以及ArrayList、HashSet、HashMap等实现。示例代码可能展示了这些接口和类的使用,如迭代器的使用,泛型的应用,以及并发集合的使用。 ...
9. **集合框架(Collection Framework)**:介绍ArrayList、LinkedList、HashSet、HashMap等集合类的使用,以及泛型和迭代器的概念。 10. **输入/输出流(I/O Streams)**:讲解如何使用FileInputStream、...