java 集合框架详解
这里有新鲜出炉的 Java 并发编程示例, 程序狗速度看过来!
Java 程序设计语言
java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言, 是由 Sun Microsystems 公司于 1995 年 5 月推出的 Java 程序设计语言和 Java 平台 (即 JavaEE(j2ee), JavaME(j2me), JavaSE(j2se)) 的总称
本文主要介绍了 java 集合框架的相关知识具有一定的参考价值, 下面跟着小编一起来看下吧
1.java 集合框架概述
java SE 包含了由一组类和接口组成的 java 集合框架(java Collection Framework, 简称 JCF), 其主要功能是用来将存储的数据以某种结构组织, 并以特定的方式来访问这些数据, 其目标是提供一个处理对象集合的通用框架, 减少程序员处理不同对象集合时的编码量
集合类中的一些区别, 除了它们是否支持重复元素操作外, 还包括元素是否有顺序, 以及是否允许添加 null 元素 java 集合框架中根据这三个区别, 将对象的存储方式分为三种类型, 分别是:
Set(集): 对象容器中的对象没有顺序, 且不能重复
List(列表): 对象容器中的对象按照索引顺序排序, 而且可以有重复的对象
Map(映射): 对象容器中的元素包含一对键对象 - 值对象映射, 其中键对象不能重复, 值对象可以重复
为支持对象的排序和遍历访问操作, java 集合框架中又提供了几个接口:
接口 SortedSet 为 Set 类型容器提供拍戏功能
接口 SortedMap 为 Map 类型容器提供对键对象的排序
接口 Comparable 和 comparator 用来实现集合中对象的排序
2.Collection 接口和 Iterator 接口
Collection 接口中定义了 Collection 对象共有的一些基本方法
方法 & nbsp; | 描述 |
int size() | 返回当前集合中包含的元素个数 & nbsp; |
isEmpyt() | 判断集合中是否含有元素 |
boolean contains(Objact o) | 判断集合中是否含有某一指定元素 |
add(Objact o) | 向集合中添加某一个元素 |
remove(Objact o) | 从集合中删除某一元素 |
Iterator iterator() | 返回一个遍历器,用来访问集合中的各个元素 |
Iterator 接口是一种用于遍历集合的接口
方法 | 描述 |
hasNext() | 如果集合中还有更多元素,该方法返回 true |
next() | 返回集合中的下一个元素 |
remove() | 删除 Iterator 返回的最后一个元素 |
1.List 接口
List 接口继承自 Collection 接口, 它有如下特点:
List 中的元素是有顺序的
List 通常允许重复元素
List 的实现类通常支持 null 元素
可以通过索引访问 List 对象容器中的元素
List 接口最常用的实现类是 ArrayList 类和 LinkedList 类
1).ArrayList
程序实例:
- package lei;
- import java.util.ArrayList;
- import java.util.List;
- public class Test {
- public static void main(String[] args) {
- List list = new ArrayList < >();
- list.add(1);
- list.add("zhangsan");
- list.add(false);
- list.add('a');
- list.add(0, "lisi");
- list.add(1);
- list.remove(1);
- list.remove(2);
- list.set(0, "wangwu");
- for (int i = 0; i < list.size(); i++) {
- System.out.println(list.get(i));
- }
- }
- }
Object 类定义的 equals()方法只有在传递给该方法的对象与调用该方法的对象是同一对象的时候, 才会返回 true 可以通过重写 equals()方法来把具有相同状态的两个对象被看做是同一对象
2).LinkedList
方法 | 描述 |
void addFirst | 在链表开头添加一个对象 |
void addLast | 在链表末尾添加一个对象 |
getFirst() | 返回链表中的第一个元素 |
getLast() | 返回链表中的最后一个元素 |
removeFirst() | 删除链表中的第一个元素 |
removeLast() | 删除链表中的最后一个元素 |
程序实例:
- package lei;
- import java.util.LinkedList;
- import java.util.List;
- public class Test2 {
- public static void main(String[] args) {
- LinkedList l = new LinkedList < >();
- l.add("zhangsan");
- l.add("lisi");
- l.addFirst(1);
- l.addLast(4);
- System.out.println(l.getFirst());
- System.out.println(l.getLast());
- l.removeFirst();
- l.removeLast();
- for (int i = 0; i < l.size(); i++) {
- System.out.println(l.get(i));
- }
- }
- }
LinkedList 与 ArrayList 的选择
如果列表需要快速存取, 但不经常进行元素的插入和删除操作, 那么选择 ArrayList 会好一些; 如果需要对; 列表进行频繁的插入和删除操作, 那么就应该选择 LinkedList
2.set 接口
set 接口继承自 Collectiion 接口, 同时也继承了 Collection 接口的全部方法 set 接口有以下特点:
Set 类型容器中不能包含重复元素当加入一个元素到容器中时, 要比较元素的内容是否存在重复的, 所以加入 Set 类型对象容器的对象必须重写 equals()方法
元素能能有顺序, 也可能没有顺序
因为元素可能没有顺序, 所以不能基于下标访问 Set 中费元素
实现 Set 接口最常用的是 HashSet 类和 TreeSet 类
1).Hashset
Hashset 类是基于哈希算法的 Set 接口实现, 它主要有如下几个特点:
当遍历 Hashset 时, 其中的元素是没有顺序的
Hashset 中不允许出现重复元素这里的重复元素是指有相同的哈希码, 并且用 equals()方法进行比较时, 返回 true 的两个对象
允许包含 null 元素
如果我们编写的类重新定义了 equals 方法, 那么这个类也必须重新定义 hashCode()方法, 并且保证当两个对象用 equals 方法比较结果为 true 时, 这两个对象的 hashCode()方法的返回值相等
程序实例:
- package lei;
- import java.util.HashSet;
- import java.util.Set;
- public class Test4 {
- public static void main(String[] args) {
- Set < String > set = new HashSet < String > ();
- set.add("zhangsan");
- set.add("lisi");
- for (String s: set) {
- System.out.println(s);
- }
- }
- }
- 2).TreeSet
TreeSet 类不仅实现类 Set 接口, 还实现了 SortedSet 接口, 从而保证集合中的对象按照一定的顺序排序当向 TreeSet 集合中添加一个对象时, 会把它插入到有序的对象序列中, 但是这种排序并不是按照对象添加的顺序排序, 而是按照一定的算法来排序
TreeSet 使用元素的自然顺序对元素进行排序, 或者根据创建 Set 时提供的 Comparator 进行排序 TreeSet 支持自然排序和自定义排序两种排序方式
3.Map 接口
Map(映射)接口是 java 集合框架中不同于 Collection 接口的另一个重要接口, 它对应的是在一种从键 (Key) 到值 (Value) 的对应关系的集合 Map 类型的对象容器里面保存着两组对象, 一组对象用于保存 Map 里的 Key, 另外一组用于保存 ValueKey 和 Value 可以升级任何引用类型的数据 Key 不能重复, 但是 Value 可以重复
1).HashMap
HashMap 是基于哈希算法的 Map 接口的实现 HashMap 将它的键保存在哈希表中进行维护, 键是唯一的但是, HashMap 并不保证键以特定顺序排列, 特别是不保证顺序永久不变
HashMap 类实现了 Map 接口, 从而具有 Map 接口的所有方法
- package day1228;
- import java.util. * ;
- public class HashMapDemo {
- public static void main(String[] args) {
- // 创建一个新的 HashMap
- Map < String,
- String > map = new HashMap < String,
- String > ();
- map.put("a1", "xiao");
- map.put("b2", "xiaol");
- map.put("a4", "xiaosd");
- map.put("b1", "12a");
- map.put("a3", "1");
- // 使用 iterator 遍历 键和值
- System.out.println("之前的 Map 值是:");
- Set < String > keys = map.keySet();
- for (Iterator < String > i = keys.iterator(); i.hasNext();) {
- String key = i.next();
- String value = map.get(key);
- System.out.println(key + "=" + value);
- }
- // 删除键为 "a4" 的值
- System.out.println("\n 删除键值为 a4 的元素");
- map.remove("a4");
- // // 使用 iterator 遍历 键和值
- System.out.println("\n 之后的 Map 值:");
- keys = map.keySet();
- for (Iterator < String > i = keys.iterator(); i.hasNext();) {
- String key = i.next();
- String value = map.get(key);
- System.out.println(key + "=" + value);
- }
- }
- }
- 2).TreeMap
TreeMap 类是基于红黑树算法的 Map 接口实现 TreeMap 中键的存放方式与 TreeSet 相似, 它将键存放在树中, 键的顺序按照自然顺序或者自定义顺序两种方式排列
程序实例:
- package day1228;
- import java.util. * ;
- public class TreeMapDemo {
- public static void main(String[] args) {
- // 创建一个新的 TreeMap
- Map < Integer,
- String > map = new TreeMap < Integer,
- String > ();
- map.put(1, "one");
- map.put(2, "two");
- map.put(3, "three");
- map.put(4, "four");
- map.put(5, "five");
- // 使用 iterator 显示键和值
- System.out.println("之前的 map 值为:");
- Set < Integer > keys = map.keySet();
- for (Object key: keys) {
- String value = map.get(key);
- System.out.println(key + "=" + value);
- }
- // 删除键为 3 的值
- System.out.println("\n 删除键值为 3 的元素");
- map.remove(3);
- // 使用 iterator 显示键和值
- System.out.println("\n 之后的值 Map 为:");
- for (Object key: keys) {
- String value = map.get(key);
- System.out.println(key + "=" + value);
- }
- }
- }
以上就是本文的全部内容, 希望本文的内容对大家的学习或者工作能带来一定的帮助, 同时也希望多多支持 PHPERZ!
来源: http://www.phperz.com/article/18/0211/358905.html