集合

集合关系:

Collection
├List
│├LinkedList
│├ArrayList
│└Vector
│ └Stack
└Set
Map
├Hashtable
├HashMap
└WeakHashMap

Collection接口主要方法:
boolean add(Object o) 添加对象到集合;
boolean remove(Object o) 删除指定的对象;
int size() 返回当前集合中元素的数量;
boolean contains(Object o) 查找集合中是否有指定的对象;
boolean isEmpty() 判断集合是否为空;
Iterator iterator() 返回一个迭代器;

迭代器方法:

boolean hasnext()//Returns true if the iteration has more elements.
void remove()
E next()//Returns the next element in the iteration.

迭代器遍历:
Iterator item=collect.iterator();
    	while(item.hasNext()){
    		Object ele=item.next();
    		System.out.println(ele);
    	}
迭代器删除元素:

Iterator item=list1.iterator();
item.next();
item.remove();//next 和 remove相互依赖 remove前没有next会报错

List接口主要方法:
void add(int index,Object element) 在指定位置上添加一个对象;
boolean addAll(int index,Collection c) 将集合 C 的元素添加到指定的位置;
Object get(int index) 返回 List 中指定位置的元素;
int indexOf(Object o) 返回第一个出现元素 O 的位置;
Object removeint(int index) 删除指定位置的元素;
Object set(int index,Object element) 用元素 element 取代位置 index 上的元素, 返回被取代的元素。
除了上面Collection提供的Iterator()外,list还提供了一个方法 listIterator(). 返回 listIterator类型,与Iterator类似 只不过比Iterator多了
ListIterator 多了一些 add() 之类的方法,允许添加、删除、设定元素、向前或向后遍历等功能
list接口实现的类:
LinkedList 类:允许 Null 元素,此外 LinkedList 提供额外的 Get、Remove、Insert 等方法在 LinkedList 的首部或尾部操作数据。这些操作使得 LinkedList 可被用作堆栈(Stack)、队列(Queue)或双向队列(Deque)。请注意 LinkedList 没有同步方法,它不是线程同步的,即如果多个线程同时访问一个 List,则必须自己实现访问同步。一种解决方法是在创建 List 时构造一个同步的 List,方法如
List list = Collections.synchronizedList(new LinkedList(...));

ArrayList类:实现了可变大小的数组。它允许所有元素,包括 Null。Size、IsEmpty、Get、Set 等方法的运行时间为常数,但是 Add 方法开销为分摊的常数,添加 N 个元素需要 O(N) 的时间,其他的方法运行时间为线性。和 LinkedList 一样,ArrayList 也是线程非同步的(unsynchronized)。

RandomAccess接口

RandomAccess 接口是一个标志接口,本身并没有提供任何方法,任务凡是通过调用 RandomAccess 接口的对象都可以认为是支持快速随机访问的对象。此接口的主要目的是标识那些可支持快速随机访问的 List 实现。任何一个基于数组的 List 实现都实现了 RaodomAccess 接口,而基于链表的实现则都没有。因为只有数组能够进行快速的随机访问,而对链表的随机访问需要进行链表的遍历。ArrayList类就继承了这个接口

通常做法,遍历前先判断

if (list instance of RandomAccess) {        
  for(int m = 0; m < list.size(); m++){}    
}else{       
  Iterator iter = list.iterator();       
  while(iter.hasNext()){}   
}
Vector 类

Vector 非常类似于 ArrayList,区别是 Vector 是线程同步的

Stack类

Stack 继承自 Vector,实现了一个后进先出的堆栈

Set类
Set 是一种不包含重复的元素的 Collection,即任意的两个元素 e1 和 e2 都有 e1.equals(e2)=false。Set 最多有一个 null 元素

********************************************************************************************************************************************

Map接口

Map 提供 Key 到 Value 的映射,一个 Map 中不能包含相同的 Key,每个 Key 只能映射一个 Value

map接口主要方法:

Collection<V> values();//返回集合视图
int size();
V put(K key, V value);//放入对象
V get(Object key);//获取对象
Set<Map.Entry<K,V>> entrySet()//返回映射的set接口视图

遍历3中方式:

1、通过获取所有的key按照key来遍历

//Set<Integer> set = map.keySet(); //得到所有key的集合
for (Integer in : map.keySet()) {
    String str = map.get(in);//得到每个key多对用value的值
}

2、通过Map.entrySet使用iterator遍历key和value

Iterator<Map.Entry<Integer, String>> it = map.entrySet().iterator();
while (it.hasNext()) {
     Map.Entry<Integer, String> entry = it.next();
       System.out.println("key= " + entry.getKey() + " and value= " + entry.getValue());
}

3、通过Map.entrySet遍历key和value,推荐,尤其是容量大时

for (Map.Entry<Integer, String> entry : map.entrySet()) {
    //Map.entry<Integer,String> 映射项(键-值对)  有几个方法:用上面的名字entry
    //entry.getKey() ;entry.getValue(); entry.setValue();
    //map.entrySet()  返回此映射中包含的映射关系的 Set视图。
    System.out.println("key= " + entry.getKey() + " and value= " + entry.getValue());
}
Hashtable 类

实现了一个基于 Key-Value 映射的哈希表。任何非空(non-null)的对象都可作为 Key 或者 Value。

HashMap 类

HashMap 和 Hashtable 类似,不同之处在于 HashMap 是线程非同步的,并且允许 Null,即 Null Value 和 Null Key

如果涉及到堆栈、队列等操作,应该考虑用 List。对于需要快速插入、删除元素等操作,应该使用 LinkedList。如果需要快速随机访问元素,应该使用 ArrayList

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值