您的位置:首页 > 编程语言 > Java开发

java对集合和迭代的操作基础总结

2011-12-21 10:30 453 查看
Collections类,可以对Set、List和Map等集合进行操作的工具类,常用方法:
static void shuffle(List list):对list集合元素进行随机排序,eg:洗牌;

static void reverse(List list):反转list集合元素的顺序;

static void sort(List list,Comparator c):根据指定的比较器对list进行排序;

static void swap(List list,int i,int j):对list集合中的i处和j处元素互换;

static int binarySearch(List list,Object key):使用二分查找法找出key在list中的索引;

static Comparator<T> reverseOrder(比较器):强行逆转比较器;

static boolean replaceAll(List list , 旧对象,新对象):使用新对象替换list中所有指定的旧对象

Map:存储的是键值对,且保证键的唯一性

!——Hashtable:哈希表数据结构,不可以存入null键和null值,线程同步;

!——HashMap:哈希表数据结构,可以存null键和null值,线程不同步;

!——TreeMap:实现SortedMap接口,底层二叉树,不同步,对key排序。

Map集合类没有遍历集合的直接方法,只能通过Map对象的keySet()获取键的Set集合,在通过Set集合的迭代器获取键和值,或者调用entrySet()获取键和值的映射关系再存入到Set集合中,分别同Map.Entry接口中方法getKey()和getValue()获取键和值。当然,既然也可以通过增强for循环获取,具体三种方法代码如下:

<span style="font-size:18px;">package com.xiongmc.Collection;
/*

* 存入学生(姓名,年龄,地址)
* 按学生姓名拼音排序
* 学生姓名和年龄相同视为同一个人
*/
import java.util.*;
publicclass HashMapTest {

@SuppressWarnings("unchecked")
publicstatic
void main(String[] args){
Map<Students,String> hs =new HashMap();

hs.put(new Students("zhangsan",23),"xizang");

hs.put(new Students("lisi",20),"xinjiang");

hs.put(new Students("wangwu",25),"neimenggu");

hs.put(new Students("yangma",19),"guangxi");

//第一种取出方式
Set<Students> keyset = hs.keySet();
Iterator<Students> it = keyset.iterator();
while(it.hasNext()){
Students s = it.next();
System.out.println(s.toString()+".."+hs.get(s));
}

//第二种取出方式
Set<Map.Entry<Students,String>> en = hs.entrySet();
Iterator<Map.Entry<Students, String>> iter = en.iterator();
while(iter.hasNext()){
Map.Entry<Students,String> me = iter.next();
Students stu = me.getKey();
String addr = me.getValue();
System.out.println(stu+"..."+addr);
}

//第三种取出方式
for(Object key : hs.keySet()){
System.out.print(key+"--->");
System.out.println(hs.get(key));
}

}
}

class Studentsimplements Comparable<Students>{

private String name;
privateint age;

public Students(String name,int age){
this.name = name;
this.age = age;
}

publicint compareTo(Students s){

int num =this.name.compareTo(s.name);

if(num==0){
returnnew Integer(this.age).compareTo(s.age);
}

return num;
}

//以下hashCode()和equals()保证键的唯一性
publicint hashCode(){

return name.hashCode()+age*5;
}
//重写equals方法
publicboolean equals(Object obj){

if(!(objinstanceof Students)){

thrownew ClassCastException("类型不匹配!");
}

Students s = (Students)obj;
returnthis.name.equals(s.getName()) &&
this.age==s.getAge();
}

//类的基本方法定义
public String getName(){
return name;
}

publicint getAge(){

return age;
}
public String toString(){
return name+".."+age;
}

}</span>

迭代器Iterator接口,用来遍历Collection集合元素,只有三个方法:

boolean hasNext():如果集合中还有没被遍历的,返回true;

Object next():返回集合里的下一个元素;

void remove():删除集合里上一次next方法返回的元素。

List:有序集合,元素可以重复,有索引

!——ArrayList:数据结构使用的是数组结构,查询快,增删慢,长度可变;

!——LinkedList:底层数据结构使用的链表,增删速度快,查询慢,

Set:无序集合,元素不可以重复

!——HashSet:数据机构是哈希表,线程非同步,元素值可以是null;存放到此集合中的对象应该重写hashCode()和equals(),hashCode值是判断元素是否一致的唯一标准,因采用hash算法,效率比较高。

TreeSet:采用二叉树数据结构,可对Set集合中的元素排序;存放到此集合中的对象要么实现Comparable接口,要么可以在构造TreeSet对象的时候传递一个实现了Comparator接口的比较器对象。关于比较器的设计,需要实现Comparetor接口
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: