Java 基础知识学习笔记——集和

1. 集合接口

         集合类的基本接口是Collection接口。Collection接口扩展了Iterable接口(迭代器),所以任何集合都可以使用for each循环。Collection接口提供了很多实用方法,所有实现类都必须实现这些方法。(具体方法请查看API文档)

2. 具体的集合

下表展示了Java类库中的集合(不包括线程安全集合),以Map结尾的类实现了Map接口,其他类实现了Collection接口。

结合类型

描述

ArrayList

一种可以动态增长和缩减的索引序列

LinkedList

一种可以在任何位置进行高效插入和删除操作的有序序列

ArrayDeque

一种用循环数组实现的双端队列

HashSet

一种没有重复元素的无序集合

TreeSet

一种有序集

EnumSet

一种包含枚举类型值的集

LinkedHashSet

一种可以记住元素插入次序的集

PriorityQueue

一种允许高效删除最小元素的集合

HashMap

一种存储键/值关联的数据结构

TreeMap

一种键值有序排列的映射表

EnumMap

一种键值属于枚举类型的映射表

LinkedHashMap

一种可以记住键/值项添加次序的映射表

WeakHashMap

一种其值无用武之地后可以被垃圾回收器回收的映射表

IdentityHashMap

一种用==而不是用equals比较键值的映射表

 

①   链表:LinkedList

Java中所有链表都是双向链接的,LinkedList类的listIterator方法返回一个迭代器对象,可以反向遍历,可以使用add()方法添加元素(iterator()方法返回的迭代器对象不能使用add()方法)。LinkedList中的set()、get()方法不能随机访问,只能从头访问。如果需要随机访问集合,就使用数组或ArrayList。

实例:public class LinkedListTest

{

         Public static void main(String[] args)

         {

                   List<String>  a = new LinkedList<>();

                   a.add(“Amy”);

                   a.add(“Carl”);

                   a.add(“Erica”);

 

                   List<String>  b = new LinkedList<>();

                   b.add(“Bob”);

                   b.add(“Doug”);

                   b.add(“Frances”);

                   b.add(“Gloria”);

 

                   ListIterator<String>  aIter = a.listIterator();

                   Iterator<String>  bIter = b.iterator();

                   //合并a、b

                   While(bIter.hasNest())

                   {

                            If(aIter.hasNext()) aIter.next();

                            aIter.add(bIter.next());

                   }

 

                   System.out.println(a);

                   //隔一个删除

                   bIter = b.iterator();

                   while(bIter.hasNext())

                   {

                            bIter.next();

                            if(bIter.hasNext())

                            {

                                     bIter.next();

                                     bIter.remove();

                            }

                   }

                   System.out.println(b);

                   //从a中删除b

                   a.removeAll(b);

                   System.out.println(a);

         }

}

②   数组列表 ArrayList

③   散列集 HashSet

只有不关心集合中元素顺序时才应该使用HashSet。

Public class SetTest

{

         Public static void main(String[] args)

         {

                   Set<String> words = new HashSet<String>();

                   Long totalTime = 0;

                   Scanner in = new Scanner(System.in);

                   Whiel(in.hasNext())

                   {

                            String word = in.next();

                            Long callTime = System.currentTimeMills();

                            Words.add(word);

                            totalTime += callTime;

                   }

                   Iterator<String> Iter = words.iterator();

                   For(int i=0;i<=20&&Iter.hasNext();i++)

                            System.out.println(Iter.next());

                   System.out.println(…);

                   System.out.println(words.size()+” distinct5 words”+totalTime+”milliseconds.”)

         }

}

④   树集TreeSet

树集是一个有序集合。

SortedSet<String> sorter = new TreeSet<>();

Sorter.add(“1”);

Sorter.add(“2”);

Sorter.add(“3”);

For(String s : sorter) System.out.print(s);

 

要实现插入树集中元素的比较大小,就需要插入的对象实现Comparable接口。但是如果要在不同的树集中使用不同的比较方式怎么办呢?或者类没有实现Comparable接口呢?可以将实现Comparator接口的对象传递给树集的构造器来使用不同的比较方法。

SortedSet<Item> sortBy = new TreeSet<>(new Comparator<Item>(){

         Public int compare(Item a,Item b)

         {

                   String A = a.getDescription();

                   String B = b.getDescription();

                   Return A.comparaTo(B);

         });

⑤   队列 java.util.Queue<E>          java.util.Deque<E>           java.util.ArrayDeque<E>

⑥   优先级队列 PriorityQueue

插入到队列中的元素总是按照排序的顺序进行检索,优先级队列使用堆(heap)作为数据结构,一个可以自我调整的二叉树。与TreeSet一样,即可以保存实现了Comparable接口的类对象,也可以保存在构造器中实现了比较器的对象。

⑦   映射表 HashMap   TreeMap

Public class MapTest

{

         Public static void main(String[] args)

         {

                   Map<String,Employee> staff = new HashMap<>();

                   Staff.put(“12345”,new Employee(“wang”));

                   Staff.put(“12346”,new Employee(“li”));

                   Staff.put(“12347”,new Employee(“amy”));

 

                   Staff.remove(“12345”);

                   System.out.println(staff.get(“12346”));

                   For(Map.Entry<String,Employee> entry : staff.entrySet())

                   {

                            String key = entry.getKey();

                            Employee value = entry.getValue();

                   }

         }

}

⑧   专用集与映射表类

弱散列映射表 WeakHashMap

可以自动的将在映射表中不使用的键/值对删除掉。

链接散列集和链接映射表 LinkedHashSet  LinkedHashMap

         可以记住插入项的茶如顺序。

         枚举集与映射表 EnumSet EnumMap

        存储的是枚举类型,没有公共构造器,使用静态工厂方法。

         标识散列映射表 IdentityHashMap

转载于:https://my.oschina.net/penger7/blog/795084