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

javaSE学习笔记之集合

2015-07-06 20:14 579 查看
------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------

JDK提供所提供的集合在java.utilbao包内,其主要结构如下:



Collection接口定义了存取一组对象的方法,其子接口Set和List分别定义了存储方式

public class CollectionsTest
{
public static void main(String[] args)
{
LinkedList list = new LinkedList();

list.add(new Integer(-8));
list.add(new Integer(20));
list.add(new Integer(-20));
list.add(new Integer(8));

Comparator r = Collections.reverseOrder();

Collections.sort(list, r);

for(Iterator iter = list.iterator(); iter.hasNext();)
{
System.out.println(iter.next() + " ");
}

System.out.println();

Collections.shuffle(list);

for(Iterator iter = list.iterator(); iter.hasNext();)
{
System.out.println(iter.next() + " ");
}

System.out.println("minimum value: " + Collections.min(list));
System.out.println("maximum value: " + Collections.max(list));
}
}


Set中的数据对象没有顺序且不可以重复,常用的Set集合有HashSet

public class SetTest1
{
public static void main(String[] args)
{
HashSet set = new HashSet();

System.out.println(set.add("a"));
set.add("b");
set.add("c");
set.add("d");
System.out.println(set.add("a"));

System.out.println(set);

}
}


List中的数据对象有顺序且可以重复,常用List集合有LinkedList、ArrayList

关于 ArrayList 与 LinkedList 的比较分析

a) ArrayList 底层采用数组实现,LinkedList 底层采用双向链表实现。

b) 当执行插入或者删除操作时,采用LinkedList 比较好。

c) 当执行搜索操作时,采用 ArrayList 比较好

public class LinkedListTest1
{
public static void main(String[] args)
{
LinkedList list = new LinkedList();

list.add("F");
list.add("B");
list.add("D");
list.add("E");
list.add("C");

list.addLast("Z");
list.addFirst("A");

list.add(1, "A2");

System.out.println("最初的集合:" + list);

list.remove("F");
list.remove(2);

System.out.println("变化之后的集合:" + list);

Object value = list.get(2);
list.set(2, (String)value + "changed");

System.out.println("最后的集合:" + list);

}
}


Map接口定义了存储“键(key)—值(value)映射对”的方法,常用的Map集合有HashMap

public class MapTest1
{
public static void main(String[] args)
{
HashMap map = new HashMap();

map.put("a", "zhangsan");
map.put("b", "lisi");
map.put("c", "wangwu");
map.put("a", "zhaoliu");

//System.out.println(map);

String value = (String)map.get("b");
System.out.println(value);
System.out.println("--------------");

String value2 = (String)map.get("d");
System.out.println(value2);


迭代器:Iterator

所有Collection接口的集合类都有一个iterator方法用于返回一个Iterator接口的对象

Iterator对象称作迭代器,用以方便的实现对集合元素的遍历操作

Iterator接口定义了如下方法:

boolean hasNext() //判断游标右边是否有元素

Object next()//返回游标右边的元素并将游标移动到下一个位置

void remove()删除游标左边的元素,在执行完next后该操作只能执行一次

public class InteratorTest
{
public static void main(String[] args)
{
HashSet set = new HashSet();

set.add("a");
set.add("b");
set.add("c");
set.add("d");
set.add("e");

//		Iterator iter = set.iterator();
//
//		while(iter.hasNext())
//		{
//			String value = (String)iter.next();
//			System.out.println(value);
//		}

for(Iterator iter = set.iterator(); iter.hasNext(); )
{
String value = (String)iter.next();

System.out.println(value);
}


Map集合进行迭代方式

keySet

public class MapTest4
{
public static void main(String[] args)
{
HashMap map = new HashMap();

for(int i = 0; i < args.length; i++)
{
if(map.get(args[i]) == null)
{
map.put(args[i], new Integer(1));
}
else
{
Integer in = (Integer)map.get(args[i]);
in = new Integer(in.intValue() + 1);

map.put(args[i], in);
}
}

Set set = map.keySet();

for(Iterator iter = set.iterator(); iter.hasNext();)
{
String key = (String)iter.next();
Integer value = (Integer)map.get(key);

System.out.println(key + " : " + value);
}


entrySet

public class MapTest5
{
public static void main(String[] args)
{
HashMap map = new HashMap();

map.put("a", "aa");
map.put("b", "bb");
map.put("c", "cc");
map.put("d", "dd");

Set set = map.entrySet();

for(Iterator iter = set.iterator(); iter.hasNext();)
{
Map.Entry entry = (Map.Entry)iter.next();

String key = (String)entry.getKey();
String value = (String)entry.getValue();

System.out.println(key + " : " + value);
}


比较器:

1. TreeSet和TreeMap都按排序顺序存储元素,这些类通过使用被Java称之为“自然顺序”的顺序存储它们的元素。然而,精确定义采用何种“排序顺序”的是比较函数。

public class TreeSetTest
{
public static void main(String[] args)
{
TreeSet set = new TreeSet();

set.add("C");
set.add("A");
set.add("B");
set.add("E");
set.add("F");
set.add("D");

System.out.println(set);

}
}


2.如果需要用不同的方法对元素进行排序,可以在构造集合或映射时,指定一个Comparator对象。

Comparator接口定义了两个方法:compare( )和equals( )。这里给出的compare( )方法按顺序比较了两个元素:

• int compare(Object obj1, Object obj2)obj1和obj2是被比较的两个对象。当两个对象相等时,该方法返回0;当obj1大于obj2时,返回一个正值;否则,返回一个负值。如果用于比较的对象的类型不兼容的话,该方法引发一个ClassCastException异常。通过覆盖compare( ),可以改变对象排序的方式。

public class  ComparatorTest
{
public static void main(String[] args)
{
TreeSet set = new TreeSet(new PersonComparator());

Person p1 = new Person(10);
Person p2 = new Person(20);
Person p3 = new Person(30);
Person p4 = new Person(40);

set.add(p1);
set.add(p2);
set.add(p3);
set.add(p4);

for(Iterator iter = set.iterator(); iter.hasNext();)
{
Person p = (Person)iter.next();
System.out.println(p.score);
}

}
}

class Person
{
int score;

public Person(int score)
{
this.score = score;
}

public String toString()
{
return String.valueOf(this.score);
}
}

class PersonComparator implements Comparator
{
public int compare(Object arg0, Object arg1)
{
Person p1 = (Person) arg0;
Person p2 = (Person) arg1;

return p2.score - p1.score;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: