Collection基础实例

来源:互联网 发布:java的原始数据类型 编辑:程序博客网 时间:2024/06/05 18:11
package 陈;


import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.LinkedList;
import java.util.Map;
import java.util.Queue;
import java.util.Set;
import java.util.TreeMap;


import org.productivity.java.syslog4j.Syslog;


import com.indigopacific.commons.util.PriorityQueue;


public class collection2 {


public static void main(String[] args) {
/*
* ArrayList和LinkedList用法类似,但是他们的数据结构不一样。
* 数据结构
* ArrayList:的数据结构是数组。
* LinkedList:的数据结构是双向循环链表。
* 功能
* ArrayList的查询效率较高。
* LinkedList的插入删除效率较高。
*/
ArrayList<Integer> arrayList=new ArrayList<Integer>();
for (int i = 0; i < 9; i++) {
arrayList.add((int)(Math.random()*100));
}
//用迭代器遍历ArrayList
Iterator<Integer> iterator=arrayList.iterator();
while(iterator.hasNext()){
System.out.println(iterator.next());
}
//获取集合中元素数量
arrayList.size();
//根据下标获取指定数据
System.out.println(arrayList.get(2));
//在指定位置添加元素
arrayList.add(2, 234);
arrayList.add(3,234);
System.out.println("*************************"+arrayList.indexOf(234));
//ArrayList集合转为数组
Object[] a=new Object[100];
a=arrayList.toArray();
for (int i = 0; i < a.length; i++) {
System.out.println("集合转数组+"+a[i]);
}
//map
HashMap<String, Object> hashMap=new HashMap<String,Object>();
hashMap.put("xuehao", "sdfs");
hashMap.put("xingmi2ng", "chesdfdgn");
hashMap.put("xingm32ing", "che234n");
hashMap.put("xingm323ing", "chween");
hashMap.put("xiwengming", "chedfn");
hashMap.put("xirngeming", "cheeen");
hashMap.get("xhehao");
/*
* Map是java中的接口,Map.Entry是Map的一个内部接口。
Map提供了一些常用方法,如keySet()、entrySet()等方法,keySet()方法返回值是Map中key值的集合;
entrySet()的返回值也是返回一个Set集合,此集合的类型为Map.Entry。
Map.Entry是Map声明的一个内部接口,此接口为泛型,定义为Entry<K,V>。
它表示Map中的一个实体(一个key-value对)。接口中有getKey(),getValue方法。
*/
//通过Iterator遍历map集合
Set entry=hashMap.entrySet();
Iterator iterator2=entry.iterator();
while(iterator2.hasNext()){
Map.Entry map=(Map.Entry)iterator2.next();
System.out.println("key:"+map.getKey()+"+++++value:"+map.getValue());
}
//通过新循环遍历map
for(Map.Entry<String, Object> map:hashMap.entrySet()){
System.out.println(map.getKey()+"##########"+map.getValue());
}
hashMap.containsKey("xhehao");
hashMap.remove("xhehao");
//TreeMap按照自然顺序存放数据
//自然顺序:“abc”在“bac”前面
TreeMap<String, Object> treeMap=new TreeMap<String,Object>();
for (int i = 3; i >0; i--) {
treeMap.put("chenjianda"+i, "chenwenlong"+i*i);
treeMap.put("zhangjia"+i, "li"+i*i);
}
for(Map.Entry<String, Object> tree:treeMap.entrySet()){
System.out.println(tree.getKey()+"------------"+tree.getValue());
}
//LinkedHashMap按照存入顺序存放数据
LinkedHashMap<String, Object> linkedHashMap=new LinkedHashMap<String,Object>();
for (int i = 3; i >0; i--) {
linkedHashMap.put("chenjianda"+i, "chenwenlong"+i*i);
linkedHashMap.put("zhangjia"+i, "li"+i*i);
}
for(Map.Entry<String, Object> tree:linkedHashMap.entrySet()){
System.out.println(tree.getKey()+"++++++++++++++++"+tree.getValue());
}
//set:HashSet,TreeSet,LinkedHashSet
//HashSet
HashSet<String> hashSet=new HashSet<String>();
for (int i = 0; i < 6; i++) {
hashSet.add("chen"+i);
hashSet.add("tang"+i);
}
for(String set:hashSet){
System.out.println("set!!!!!!!!!!!!!!"+set);
}
//查询集合中元素数量
System.out.println(hashSet.size());
//集合转数组
Object[] objects=new Object[100];
objects=hashSet.toArray();
//删除元素
hashSet.remove("chen1");

//Queue
/*
* Queue接口中定义了如下的几个方法:


void add(Object e):  将指定元素插入到队列的尾部。

object element():  获取队列头部的元素,但是不删除该元素。

boolean offer(Object e):  将指定的元素插入此队列的尾部。当使用容量有限的队列时,此方法通常比add(Object e)有效。 

Object peek():  返回队列头部的元素,但是不删除该元素。如果队列为空,则返回null。

Object poll():  返回队列头部的元素,并删除该元素。如果队列为空,则返回null。

Object remove():  获取队列头部的元素,并删除该元素。

Queue接口有一个PriorityQueue实现类。除此之外,Queue还有一个Deque接口,Deque代表一个“双端队列”,双端队列可以同时从两端删除或添加元素,因此Deque可以当作栈来使用。java为Deque提供了ArrayDeque实现类和LinkedList实现类。

1.PriorityQueue实现类

PriorityQueue是一种比较标准的队列实现类,而不是绝对标准的。
这是因为PriorityQueue保存队列元素的顺序不是按照元素添加的顺序来保存的,
而是在添加元素的时候对元素的大小排序后再保存的。
因此在PriorityQueue中使用peek()或pool()取出队列中头部的元素,
取出的不是最先添加的元素,而是最小的元素。
PriorityQueue不允许插入null元素,它还需要对队列元素进行排序,PriorityQueue有两种排序方式:


自然排序:采用自然排序的PriorityQueue集合中的元素必须实现Comparator接口,
而且应该是一个类的多个实例,否则可能导致ClassCastException异常。
定制排序:创建PriorityQueue队列时,传入一个Comparable对象,
该对象负责对所有队列中的所有元素进行排序。采用定制排序不要求必须实现Comparator接口。
*/
Queue<String> priorityQueue=new LinkedList<String>();
priorityQueue.add("chen");
priorityQueue.offer("jian");
priorityQueue.offer("da");
for(String que:priorityQueue){
System.out.println("Queue$$$$$$$$$$$$$$$"+que);
}
System.out.println(priorityQueue.peek());
priorityQueue.poll();
priorityQueue.remove();
System.out.println(priorityQueue.peek());


}


}
原创粉丝点击