Java集合框架
程序员文章站
2022-05-12 07:57:01
...
集合框架:
collection 框架在软件包 java.util中,接口Collection<E>是Collection 层次结构中的根接口。接口 Collection<E>的已知子接口有List,Set等,已知实现类有ArrayList,LinkedList,Stack,Vector等。
一、以下为常见的:
1)、接口 List <E> 有序的Collection。
常用的List实现类有:ArrayList,LinkedList,Stack,Vector
ArrayList:数组序列:有序的,可重复的,长度可变的,有下标的,地址连续的
LinkedList:链表,链式序列,有序的,可重复的,长度可变的,有下标的,地址任意的,地址是任意的,各个数据之间通过引用关联
Vector :向量,可以实现可增长的对象数组
Stack :栈,后进先出的对象堆栈, 最先放入的数据在栈的底部,最后放的数据在栈的顶部,每次取数据都只能取到栈顶的数据,是Vector的子类
2)、集合 Set 无重复的Collection。
常用的Set实现类有: HashSet,TreeSet
HashSet:无序的,不可重复的,长度可变的
TreeSet:不重复的,根据内容的自然顺序进行排序
3)、映射 Map<k,v>
常用的Set实现类有:HashMap,TreeMap
HashMap:k是一个HashSet
TreeMap:k是一个TreeSet
所有的K不能重复,每个K都对应一个Value,如果在加入数据的时候,出现相同的Key,则替换掉原有的Value
二、一些区别以及分别的使用场景:
1)、 ArrayList与LinkedList
ArrayList:在ArrayList中插入数据或删除数据时,需要将其后的所有数据相应的后移或者是前移,这样需要花费较多时间,效率比较低;而且此实现不是线程同步的。然而它的地址是连续的,一旦数据存储好了,查找效率比较高。
LinkedList:因为它的地址是任意的,若要随机的访问某个数据,则必须从链表的一端一个一个元素的去查找,所以适合进行插入和删除操作,但是查询效率比较低。
所以当要随机访问元素时,使用ArrayList,当要添加或删除数据时,使用LinkedList。
2)、ArrayList与Vector
Vector和ArrayList一样,都是大小可变数组的实现
但当Vector或ArrayList中的元素超过它的初始大小时,Vector的容量会翻倍,而ArrayList只增加50%的大小
ArrayList不支持线程同步,而 Vector是同步的
所以在多线程中,一般采用Vector
3)、HashSet与TreesSet
HashSet:它不保证 set 的迭代顺序,特别是它不保证该顺序恒久不变,其中元素是不可重复的,不支持线程同步。
TreeSet:使用元素的自然顺序对元素进行排序,元素是不可重复的,不支持线程同步。
代码示例:
import java.util.*;
public class Set {
public static void main(String[] args) {
HashSet<String> hs=new HashSet<String>();
hs.add("B");
hs.add("A");
hs.add("D");
hs.add("C");
for (String h : hs) {
System.out.print(h+" ");
}
System.out.println(" ");
TreeSet<String> ts = new TreeSet<String>();
ts.add("B");
ts.add("A");
ts.add("D");
ts.add("C");
for (String t : ts) {
System.out.print(t+" ");
}
}
}
结果如下:
D A B C
A B C D
4)、HashMap与TreeMap
Hash:此类不保证映射的顺序,特别是它不保证该顺序恒久不变。不支持线程同步 。
TreeMap:该映射根据其键的自然顺序进行排序,不支持线程同步。
代码如下:
import java.util.*;
public class HashMapDemo {
public static void main(String[] args) {
//创建一个HashMap对象
HashMap<String,Integer> map = new HashMap<String,Integer>();
//存放数据
map.put("b", 90);
map.put("a", 100);
map.put("d", 50);
map.put("c", 10);
//如果存放相同的K,则替换掉这个K对应的Value
//map.put("韩国", 10);
//取出数据
//1.取得所有的k
Set<String> set = map.keySet();
//2.迭代Set
Iterator<String> iter = set.iterator();
System.out.println("HashMap:");
while(iter.hasNext()){
//取得一个K
String key = iter.next();
//根据K获得Value
int value = map.get(key);
System.out.print(key+" "+value+" ");
}
TreeMap<String,Integer> tm=new TreeMap<String,Integer>();
tm.put("b", 90);
tm.put("a", 100);
tm.put("d", 50);
tm.put("c", 10);
Set<String> set1 = tm.keySet();
//2.迭代Set
Iterator<String> iter1 = set1.iterator();
System.out.println("\nTreeMap:");
while(iter1.hasNext()){
//取得一个K
String key1 = iter1.next();
//根据K获得Value
int value1 = tm.get(key1);
System.out.print(key1+" "+value1+" ");
}
}
}
结果如下:
HashMap:
d 50 b 90 c 10 a 100
TreeMap:
a 100 b 90 c 10 d 50
collection 框架在软件包 java.util中,接口Collection<E>是Collection 层次结构中的根接口。接口 Collection<E>的已知子接口有List,Set等,已知实现类有ArrayList,LinkedList,Stack,Vector等。
一、以下为常见的:
1)、接口 List <E> 有序的Collection。
常用的List实现类有:ArrayList,LinkedList,Stack,Vector
ArrayList:数组序列:有序的,可重复的,长度可变的,有下标的,地址连续的
LinkedList:链表,链式序列,有序的,可重复的,长度可变的,有下标的,地址任意的,地址是任意的,各个数据之间通过引用关联
Vector :向量,可以实现可增长的对象数组
Stack :栈,后进先出的对象堆栈, 最先放入的数据在栈的底部,最后放的数据在栈的顶部,每次取数据都只能取到栈顶的数据,是Vector的子类
2)、集合 Set 无重复的Collection。
常用的Set实现类有: HashSet,TreeSet
HashSet:无序的,不可重复的,长度可变的
TreeSet:不重复的,根据内容的自然顺序进行排序
3)、映射 Map<k,v>
常用的Set实现类有:HashMap,TreeMap
HashMap:k是一个HashSet
TreeMap:k是一个TreeSet
所有的K不能重复,每个K都对应一个Value,如果在加入数据的时候,出现相同的Key,则替换掉原有的Value
二、一些区别以及分别的使用场景:
1)、 ArrayList与LinkedList
ArrayList:在ArrayList中插入数据或删除数据时,需要将其后的所有数据相应的后移或者是前移,这样需要花费较多时间,效率比较低;而且此实现不是线程同步的。然而它的地址是连续的,一旦数据存储好了,查找效率比较高。
LinkedList:因为它的地址是任意的,若要随机的访问某个数据,则必须从链表的一端一个一个元素的去查找,所以适合进行插入和删除操作,但是查询效率比较低。
所以当要随机访问元素时,使用ArrayList,当要添加或删除数据时,使用LinkedList。
2)、ArrayList与Vector
Vector和ArrayList一样,都是大小可变数组的实现
但当Vector或ArrayList中的元素超过它的初始大小时,Vector的容量会翻倍,而ArrayList只增加50%的大小
ArrayList不支持线程同步,而 Vector是同步的
所以在多线程中,一般采用Vector
3)、HashSet与TreesSet
HashSet:它不保证 set 的迭代顺序,特别是它不保证该顺序恒久不变,其中元素是不可重复的,不支持线程同步。
TreeSet:使用元素的自然顺序对元素进行排序,元素是不可重复的,不支持线程同步。
代码示例:
import java.util.*;
public class Set {
public static void main(String[] args) {
HashSet<String> hs=new HashSet<String>();
hs.add("B");
hs.add("A");
hs.add("D");
hs.add("C");
for (String h : hs) {
System.out.print(h+" ");
}
System.out.println(" ");
TreeSet<String> ts = new TreeSet<String>();
ts.add("B");
ts.add("A");
ts.add("D");
ts.add("C");
for (String t : ts) {
System.out.print(t+" ");
}
}
}
结果如下:
D A B C
A B C D
4)、HashMap与TreeMap
Hash:此类不保证映射的顺序,特别是它不保证该顺序恒久不变。不支持线程同步 。
TreeMap:该映射根据其键的自然顺序进行排序,不支持线程同步。
代码如下:
import java.util.*;
public class HashMapDemo {
public static void main(String[] args) {
//创建一个HashMap对象
HashMap<String,Integer> map = new HashMap<String,Integer>();
//存放数据
map.put("b", 90);
map.put("a", 100);
map.put("d", 50);
map.put("c", 10);
//如果存放相同的K,则替换掉这个K对应的Value
//map.put("韩国", 10);
//取出数据
//1.取得所有的k
Set<String> set = map.keySet();
//2.迭代Set
Iterator<String> iter = set.iterator();
System.out.println("HashMap:");
while(iter.hasNext()){
//取得一个K
String key = iter.next();
//根据K获得Value
int value = map.get(key);
System.out.print(key+" "+value+" ");
}
TreeMap<String,Integer> tm=new TreeMap<String,Integer>();
tm.put("b", 90);
tm.put("a", 100);
tm.put("d", 50);
tm.put("c", 10);
Set<String> set1 = tm.keySet();
//2.迭代Set
Iterator<String> iter1 = set1.iterator();
System.out.println("\nTreeMap:");
while(iter1.hasNext()){
//取得一个K
String key1 = iter1.next();
//根据K获得Value
int value1 = tm.get(key1);
System.out.print(key1+" "+value1+" ");
}
}
}
结果如下:
HashMap:
d 50 b 90 c 10 a 100
TreeMap:
a 100 b 90 c 10 d 50
上一篇: String类中常用的方法
下一篇: Linux shell I/O重定向详解