Java集合框架

集合框架:
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:使用元素的自然顺序对元素进行排序,元素是不可重复的,不支持线程同步。


代码示例:
[/code]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:该映射根据其键的自然顺序进行排序,不支持线程同步。

代码如下:
[code="java"]
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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值