javaSE学习笔记之集合

原创 2015年07月06日 20:14:06


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;
	}
}


版权声明:本文为博主原创文章,未经博主允许不得转载。

Javase基础学习笔记之集合(1)

集合以及集合框架

JavaSE学习笔记--集合框架

---------------------- http://edu.csdn.net/heima" target="blank">android培训、http://edu.csdn.net/heima...

【JavaSE学习笔记】集合01_Collection,List

集合 Collection 1)概述 集合:按照一个规则,对一个数组进行排序,针对不同的需求,不同的做法 由于有不同的功能,并且他们的数据结构不同,他们集合之间有共性内容,向上抽取 ...

JavaSE学习笔记_12:Java集合框架

Java集合框架   集合框架:     集合框架中有许多类和接口,它们都是容器,就像数组一样,可以存取很多数据。但是比数组灵活,它存储的数据类型任意(泛型。可以指定)(比如可以字符串,存类对象。其实...

JavaSE基础学习笔记-集合框架2

今天复习了一下Java集合框架的另一个成员Set  和 Map,发现集合不是那么简单是,当然想会用很容易,但是理解当中的一些原理,还是要花些功夫。 首先说一下Set集合。 Set集合是一个...

【JavaSE学习笔记】集合应用_Collectons工具,模拟斗地主,异常

集合应用 A.Collections工具 1)Collections和Collection的区别? Collection:集合:定层次的一个根接口,有两个子接口:List,Set Col...

【JavaSE学习笔记】集合03_Map,集合的嵌套

集合03 Map 1)需求: 在存储学生对象,每一个学生一个学号和姓名,通过学号去找学生 按照之前的集合操作,将学号和姓名作为当前类的成员封装起来, 然后遍历集合,将学号...

javaSE的学习笔记

  • 2017年08月01日 23:27
  • 258KB
  • 下载

javaSE学习笔记

  • 2011年07月11日 15:43
  • 82KB
  • 下载

学习笔记之JavaSE(30)--JavaAPI详解5

集合类之List接口
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:javaSE学习笔记之集合
举报原因:
原因补充:

(最多只允许输入30个字)