- ·上一篇文章:java基础知识总结
- ·下一篇文章:java中ListIterator使用方法
java集合类总结
[t]java集合类[/t]
上述类图中,实线边框的是实现类,比如ArrayList,LinkedList,HashMap等,折线边框的是抽象类,比如AbstractCollection,AbstractList,AbstractMap等,而点线边框的是接口,比如Collection,Iterator,List等。
发现一个特点,上述所有的集合类,都实现了Iterator接口,这是一个用于遍历集合中元素的接口,主要包含hashNext(),next(),remove()三种方法。它的一个子接口LinkedIterator在它的基础上又添加了三种方法,分别是add(),previous(),hasPrevious()。也就是说如果是先Iterator接口,那么在遍历集合中元素的时候,只能往后遍历,被遍历后的元素不会在遍历到,通常无序集合实现的都是这个接口,比如HashSet,HashMap;而那些元素有序的集合,实现的一般都是LinkedIterator接口,实现这个接口的集合可以双向遍历,既可以通过next()访问下一个元素,又可以通过previous()访问前一个元素,比如ArrayList。
? ? 是否有序 | ? ?是否允许元素重复 | ||
Collection | ? ? ?否 | ? ? 是 | |
? ? ? List | 是 | ? ? 是 | |
? ? ?Set | ?AbstractSet | 否 | ? ? 否 |
?HashSet | |||
?TreeSet | 是(用二叉排序树) | ||
? ?Map | AbstractMap | 否 | 使用key-value来映射和存储数据,key必须唯一,value可以重复 |
? ?HashMap | |||
? ?TreeMap | 是(用二叉排序树) |
[t]HashSet[/t]
HashSet是Set接口的一个子类,主要的特点是:里面不能存放重复元素,而且采用散列的存储方法,所以没有顺序。这里所说的没有顺序是指:元素插入的顺序与输出的顺序不一致。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | package cn.k88; import java.util.*; public class Example5 { public static void main(String[] args) { Set<String>set=new HashSet<String>(); Iterator<String>iter=set.iterator(); //使用迭代器输出 set.add("b"); set.add("c"); set.add("o"); set.add("d"); set.add("e"); set.add("r"); set.add("r"); while(iter.hasNext()){ System.out.println(iter.next()+" "); } //使用ForEach输出 for(String e:set ) System.out.println(e+" "); System.out.println(set); //调用toString输出 } } |
[t]ArrayList[/t]
ArrayList是List的子类,它和HashSet想法,允许存放重复元素,因此有序。集合中元素被访问的顺序取决于集合的类型。如果对ArrayList进行访问,迭代器将从索引0开始,每迭代一次,索引值加1。然而,如果访问HashSet中的元素,每个元素将会按照某种随机的次序出现。虽然可以确定在迭代过程中能够遍历到集合中的所有元素,但却无法预知元素被访问的次序。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | package cn.k88; import java.util.ArrayList; import java.util.Iterator; import java.util.List; public class Example { public static void main(String[] args) { List<String> arrList=new ArrayList<String>(); arrList.add("a"); arrList.add("b"); arrList.add("c"); arrList.add("c"); arrList.add("d"); //使用Iterator输出集合 Iterator<String> iter=arrList.iterator(); while(iter.hasNext()) { System.out.print(iter.next()+" "); } System.out.println(); //使用For Each输出结合 for(String e:arrList) { System.out.print(e+" "); } System.out.println(); //使用toString输出集合 System.out.println(arrList); } } |
[t]LinkedList[/t]
LinkedList是一种可以在任何位置进行高效地插入和删除操作的有序序列。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | package cn.k88; import java.util.*; public class Example1 { public static void main(String[] args) { //@author Coder.bng List <String>list=new LinkedList<String>(); list.add("Coder.bing"); list.add("wangzheng"); list.add("bingfeng"); list.add("k88"); ListIterator <String>iter=list.listIterator(); iter.next(); iter.remove(); //remove Coder.bing for(String s:list) System.out.println(s+" "); iter.add("小学生"); iter=list.listIterator(); while(iter.hasNext()){ System.out.println(iter.next()); } } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | package cn.k88; import java.util.Iterator; import java.util.LinkedList; public class Example2 { public static void main(String args[]){ LinkedList <Integer>lin=new LinkedList<Integer>(); for(int i=0;i<10;i++) lin.add(i); System.out.println(lin.getFirst()); System.out.println(lin.getLast()); System.out.println(lin.peek()); // ==getLast System.out.println(lin.remove()); } } |
[t]HashMap – 散列映射[/t]
HashMap<K,V>泛型类实现了泛型接口Map<K,V>,HashMap<K,V>类中绝大部分方法都是Map<K,V>接口方法的实现。
HashMap<K,V>对象采用散列表这种数据结构存储数据,习惯上称HashMap<K,V>对象为散列映射。散列映射用于存储 键/值对.
——MapDemo.java——————————————————————————–
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | package cn.k88; import java.util.Collection; import java.util.HashMap; import java.util.Iterator; import java.util.Map; public class MapDemo { public static void main(String[] args) { Map<String,String>map=new HashMap<String,String>(); map.put("name","wangzheng"); map.put("ID","8221113023"); map.put("qq","739696033"); System.out.println(map); // 调用toString() String str=map.get("name"); System.out.println(str); // output: wangzheng if(map.containsKey("name")) //判断键是否存在 System.out.println("键存在"); else System.out.println("键不存在"); if(map.containsValue("739696033")) //判断值是否存在 System.out.println("值存在"); else System.out.println("不存在"); Collection<String>c=map.values(); //values(): 返回此映射中包含的值的 Collection 视图。 Iterator<String>i=c.iterator(); //迭代器输出hashmap的值 while(i.hasNext()){ System.out.println(i.next()); } } } |
——Example7.java———–
1 2 3 4 5 6 7 8 9 10 11 | package cn.k88; public class Example7 { public static void main(String[] args) { WindowWord win=new WindowWord(); win.setTitle("英-汗小字典"); } } |
——WindowWord.java———-
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | package cn.k88; import java.awt.FlowLayout; import java.awt.event.ActionListener; import javax.swing.JFrame; import javax.swing.JTextField; public class WindowWord extends JFrame{ JTextField inputText,showText; WordPolice police; WindowWord(){ setLayout(new FlowLayout()); inputText=new JTextField(6); showText=new JTextField(6); add(inputText); add(showText); police=new WordPolice(); police.setJTextField(showText); inputText.addActionListener((ActionListener) police); setBounds(100,100,400,280); setVisible(true); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } } |
——-WordPolice.java———-
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 | package cn.k88; import java.util.HashMap; import java.util.Scanner; import javax.swing.JTextField; import javax.swing.JTextField; import java.io.File; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; public class WordPolice implements ActionListener{ JTextField showText; HashMap<String,String>hashtable; File file=new File("word.txt"); Scanner sc=null; WordPolice() { hashtable=new HashMap<String,String >(); try{sc=new Scanner(file); while(sc.hasNext()){ String englishWord=sc.next(); String chineseWord=sc.next(); hashtable.put(englishWord,chineseWord); } } catch(Exception e) { } } @Override public void actionPerformed(ActionEvent e) { // TODO 自动生成的方法存根 String englishWord=e.getActionCommand(); if(hashtable.containsKey(englishWord)){ String chineseWord=hashtable.get(englishWord); showText.setText(chineseWord); } else { showText.setText("没有此单词."); } } public void setJTextField(JTextField showText) { // TODO 自动生成的方法存根 this.showText=showText; } } |
java集合类总结