javaSE学习笔记之集合

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u014070705/article/details/46778615


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


猜你喜欢

转载自blog.csdn.net/u014070705/article/details/46778615