集合_若雪似风_新浪博客

集合

集合实际上就是一个动态的对象,与一般的对象不同,集合中的对象内容可以任 意扩充。 

java集合主要负责保存、盛装其他数据,因此集合类也称容器类。java集合类分为 set、list、map、queue四大体系。其中set代表无序、不可重复的集合;list代表有序、 可重复的集合;map代表具有映射关系的集合;queue代表队列集合。 

java集合类主要由两个接口派生:Collection和Map,是集合框架的根接口。下面 是其接口、子接口和实现类的继承树。 

 

Collection 接口存储一组不唯一,无序的对象

List 接口存储一组不唯一,有序(插入顺序)的对象

Set 接口存储一组唯一,无序的对象

 

  ArrayList实现了长度可变的数组,在内存中分配连续的空间。遍历元素和随机访问元素的效率比较高

  LinkedList采用链表存储方式。插入、删除元素时效率比较高

 

引入import java.util.*;

实例化ArrayList对象

import java.util.*;

List  engineers = new ArrayList();

ArrayList  engineers = new ArrayList();

 

ArrayList添加元素

int Add(Object value) //添加一个对象到集合的末尾

List engineers = new ArrayList();

 

SE jack = new SE();

jack.name = "aaa";

engineers.add(jack);

 

访问ArrayList元素

(类型) ArrayList [index]  //按指定索引(下标)取得对象

获取集合元素,并执行问好

SE engineer = (SE) engineers[0];

System.out.println(engineer.toString()); 

 

ArrayList 的遍历

for循环

for (int i = 0; i < engineers.size(); i++)

{

        SE seFor = (SE)engineers[i];

        System.out.println(seFor.name);

}

foreach 方式

for (Object obj : engineers)

{

         SE seForeach = (SE)obj;

         System.out.println(seForeach.name);

 

删除ArrayList的元素

 

ArrayList.remove(对象名)   //删除指定对象名的对象

ArrayList.remove(index)  //删除指定索引的对象

engineers.remove(0);        

engineers.remove(ema);   

System.out.println(engineers.size());

 

 

List接口常用方法 

boolean add(Object o) 在列表的末尾顺序添加元素,起始索引位置从0开始

void add(int index,Object o) 在指定的索引位置添加元素。索引位置必须介于0和列表中元素个数之间

int size() 返回列表中的元素个数

Object get(int index) 返回指定索引位置处的元素。取出的元素是Object类型,使用前需要进行强制类型转换

boolean contains(Object o) 判断列表中是否存在指定元素

boolean remove(Object o) 从列表中删除元素

Object remove(int index) 从列表中删除指定位置元素,起始索引位置从0开始

 

 

public static void main(String[] args) {

List list=new ArrayList();

//添加

list.add("aaa");

list.add(123);

list.add(true);

list.add("bbbb");

//查看元素个数

System.out.println(list.size());

//取出第N个

System.out.println(list.get(2));

//删除

list.remove(0);

System.out.println(list.size());

}

LinkedList的特殊方法

void addFirst(Object o) 在列表的首部添加元素

void addLast(Object o) 在列表的末尾添加元素

Object getFirst() 返回列表中的第一个元素

Object getLast() 返回列表中的最后一个元素

Object removeFirst() 删除并返回列表中的第一个元素

Object removeLast() 删除并返回列表中的最后一个元素

 

 

Map

无序 key必须唯一,值可以不唯一

 

put 如果不存在,添加 如果存在,修改成新数据

在Map里必须使用类的类型,Integer 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1.ArrayList与Vector的异同:

      同:Vector和ArrayList在使用上非常相似,都可用来表示一组数量可变的对象应用的集合,并且可以随机地访问其中的元素。 

       异:ArrayList是最常用的List实现类,内部是通过数组实现的,它允许对元素进行快速随机访问。数组的缺点是每个元素之间不能有间隔,当数组大小不满足时需要增加存储能力,就要讲已经有数组的数据复制到新的存储空间中。当从ArrayList的中间位置插入或者删除元素时,需要对数组进行复制、移动、代价比较高。因此,它适合随机查找和遍历,不适合插入和删除。

 

     Vector与ArrayList一样,也是通过数组实现的,不同的是它支持线程的同步,即某一时刻只有一个线程能够写Vector,避免多线程同时写而引起的不一致性,但实现同步需要很高的花费,因此,访问它比访问ArrayList慢。

 

     Vector是线程安全的,也就是说是它的方法之间是线程同步的,而ArrayList是线程序不安全的,它的方法之间是线程不同步的。如果只有一个线程会访问到集合,那最好是使用ArrayList,因为它不考虑线程安全,效率会高些;如果有多个线程会访问到集合,那最好是使用Vector,因为不需要我们自己再去考虑和编写线程安全的代码。

 

        当Vector或ArrayList中的元素超过它的初始大小时,Vector会将它的容量翻倍,而ArrayList只增加50%的大小,这样,ArrayList就有利于节约内存空间。

 

2.Hashtable和HashMap的异同:

    1>HashMap是线程非安全的

 

hastmap是一个接口 是map接口的子类,是将键映射到值的对象,其中键和值都是对象,并且不能包含重复键,但可以包含重复值。HashMap允许null key和null value,而hashtable不允许。

 

 

    2>HashTable是线程安全的一个Collection。

 

     HashMap是Hashtable的轻量级实现(非线程安全的实现),他们都完成了Map接口,主要区别在于HashMap允许空(null)键值(key),由于非线程安全,效率上可能高于Hashtable。

HashMap允许将null作为一个entry的key或者value,而Hashtable不允许。

     HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey。因为contains方法容易让人引起误解。 

     Hashtable继承自Dictionary类,而HashMap是Java1.2引进的Map interface的一个实现。

     最大的不同是,Hashtable的方法是Synchronize的,而HashMap不是,在多个线程访问Hashtable时,不需要自己为它的方法实现同步,而HashMap 就必须为之提供外同步。 

     Hashtable和HashMap采用的hash/rehash算法都大概一样,所以性能不会有很大的差异。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值