Java集合框架

来源:互联网 发布:他知道我们在膜他知乎 编辑:程序博客网 时间:2024/06/06 07:51

Java提供了几个能有效地组织和操作数据的数据结构,这些数据结构简称为Java集合框架。

Java集合框架主要包括两种类型的容器,一种是集合(接口Collection<E>),存储一个元素集合,另一种是图(接口Map<K,V>),存储键/值对映射。Collection接口又有3种子类型,ListSetQueue,再下面是一些抽象类,最后是具体实现类,常用的有ArrayListLinkedListVectorHashSetLinkedHashSetHashMapLinkedHashMap等等。

1. List

下面介绍ArrayListLinkedListVector这三个类

java.util.ArrayList<E> : 基于数组:查询方便,插入麻烦

代码举例:

package List;import java.util.ArrayList;import java.util.List;import DrawBoard2.Shape;import DrawBoard2.ShapeLine;public class MyListArry {List<Shape> myList = null;public void genData(){myList = new ArrayList<Shape>();myList.add(new ShapeLine(1,1,1,1,null,1));//添加元素myList.add(new ShapeLine(2,1,1,1,null,1));myList.add(new ShapeLine(3,1,1,1,null,1));myList.add(new ShapeLine(4,1,1,1,null,1));}public void printData(){//遍历ArrayListint size = myList.size();//获取元素个数for(int i = 0;i < size;i++){Shape shape = myList.get(i);//获取指定位置元素System.out.println(shape);}} public static void main(String[] args) {MyListArry mla = new MyListArry();mla.genData();mla.printData();}}

java.util.LinkedList<E> : 基于链表:插入容易,访问麻烦

代码举例(类似ArrayList)

package List;import java.util.LinkedList;import java.util.List;import DrawBoard2.Shape;import DrawBoard2.ShapeLine;public class MyLink {List<Shape> myList = null;public void genData(){myList = new LinkedList<Shape>();myList.add(new ShapeLine(1,1,1,1,null,1));myList.add(new ShapeLine(2,1,1,1,null,1));myList.add(new ShapeLine(3,1,1,1,null,1));myList.add(new ShapeLine(4,1,1,1,null,1));}public void printData(){//遍历LinkedListint size = myList.size();for(int i = 0;i < size;i++){Shape shape = myList.get(i);System.out.println(shape);}} public static void main(String[] args) {MyLink ml = new MyLink();ml.genData();ml.printData();}}
LinkedList是在一个链表中存储元素,如果需要经常插入或者删除元素可以选择该类


java.util.Vector<E> : 基于数组:基于线程安全,付出一定性能代价(代码类似ArrayList)


注:List是有序的集合(可按插入顺序显示),且可以重复插入


2.Set

HashSet

package List;import java.util.HashSet;import java.util.Iterator;import DrawBoard2.Shape;import DrawBoard2.ShapeLine;public class TestHashSet {HashSet<Shape> myList = null;public void genData(){myList = new HashSet<Shape>();myList.add(new ShapeLine(1,1,1,1,null,1));myList.add(new ShapeLine(2,1,1,1,null,1));myList.add(new ShapeLine(3,1,1,1,null,1));myList.add(new ShapeLine(4,1,1,1,null,1));}public void printData(){//遍历Iterator<Shape> iterator = myList.iterator();//创建迭代器对象while(iterator.hasNext()){     //如果有下一个元素可以迭代则返回true继续执行循环Shape s = iterator.next();System.out.println(s);}} public static void main(String[] args) {TestHashSet hs = new TestHashSet();hs.genData();hs.printData();}}

LinkedHashSet是HashSet的子类


注:Set是个无序的,且不允许重复元素存在的集合,遍历时用到迭代器

Iterator<Shape> iterator = hashSet.iterator();while (iterator.hasNext()) {Shape s = iterator.next();System.out.println(s);}



3.Map<K,V>

HashMap<K,V>

package List;import java.util.HashMap;import java.util.Iterator;import java.util.Set;import DrawBoard2.Shape;import DrawBoard2.ShapeLine;public class TestHashMap {HashMap<String,Shape> myList = null;public void genData(){myList = new HashMap<String,Shape>();myList.put("shape1",new ShapeLine(1,1,1,1,null,1));myList.put("shape2",new ShapeLine(2,1,1,1,null,1));myList.put("shape3",new ShapeLine(3,1,1,1,null,1));myList.put("shape4",new ShapeLine(4,1,1,1,null,1));}public void printData(){//遍历Set<String> keySet = myList.keySet();             //获得所含键Iterator<String> iterator = keySet.iterator();    //调用迭代器方法while(iterator.hasNext()){  String key = iterator.next();Shape shape = myList.get(key);  //获得指定键所映射的值System.out.println(key);System.out.println(shape);}} public static void main(String[] args) {TestHashMap hm = new TestHashMap();hm.genData();hm.printData();}}

在Map中键可以是任意类型的对象,但不能有重复的键,每个键都对应一个值,真正存储在图中的是键值构成的条目,LinkedHashMap继承自HashMap,它主要是用链表实现来扩展HashMap类,HashMap中条目是没有顺序的,但是在LinkedHashMap中元素既可以按照它们插入图的顺序排序,也可以按它们最后一次被访问的顺序排序。

0 0