javaSE学习笔记之集合

来源:互联网 发布:arya stark无面者 知乎 编辑:程序博客网 时间:2024/04/29 17:25

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


0 0
原创粉丝点击