Java集合框架

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(){
		//遍历ArrayList
		int 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(){
		//遍历LinkedList
		int 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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值