Java容器代码

目录

 

Array:

Collection:

Set和Iterator:

Map:

泛型:


Array:

package Container;
import java.util.Arrays;
import java.util.Comparator;
/*
 * Arrays类常用方法:
 * copyOF():将一个数组中的值复制到新的数组中
 * sort():将一个数组中的值进行排序,默认为升序排列
 * binarySearch():在已排好序的数组中查找特定值
 * equals():判断两个数组是否相等
 * asList():将数组重构为集合
 * 
 * 使用Arrays.sort()可以为数组排序,当数组元素是对象时,判断其大小排序
 * 可以使用java.util.Comparator里的Comparator接口,接口中只有一个compare()方法供其它类实现,(友元函数形式)
 * 也可以使用java.lang.Comparator里的Comparable接口,接口中只有一个compareTo()方法供其它类实现。(成员函数形式)
 * 推荐使用compare(),因为其不改变当前对象的数据。
 */
public class Arrays_ {
	public class employee implements Comparator
	{
		int age;		
		String name;
		float salary;	
		@Override
		public int compare(Object o1,Object o2) {	//大于,等于和小于分别返回正整数,0和负整数
			//职员根据年龄比较
			/*employee e1=(employee)o1,e2=(employee)o2;
			return e1.age-e2.age;*/
			//职员根据工资比较
			employee e1=(employee)o1,e2=(employee)o2;
			float judge=(int)(e1.salary-e2.salary);	//当e1.salary-e2.salary为0-1之间时,转为int会变为0
			if(judge>0)
			return 1;
			else if(judge==0)return 0;
			else return -1;
		}
	}
	public static void main(String agrs[])
	{
		//数组复制
		int a[]=new int[10];
		for(int i=0;i<10;i++)
		{
			a[i]=10-i;
		}
		int b[]=Arrays.copyOf(a, a.length);
		for(int i=0;i<10;i++)
		{
			System.out.print(b[i]+" ");
		} 
		
		//数组排序
		Arrays.sort(a);
		System.out.println("");
		for(int i=0;i<10;i++)
		{
			System.out.print(a[i]+" ");
		}
	}
}

Collection:

package Container;

import java.util.*;
/*
 * Collection(类集)接口:所有实现Collection接口以及Collection子接口的类都能使用迭代器
 * 方法:
 * add():添加一个元素
 * addAll():将其它容器所有元素添加至本容器
 * clear():清空本容器
 * contains():判断容器中是否存在本元素
 * containsAll():判断另一容器是否本容器子容器
 * equals():判断两容器是否相等
 * isEmpty():判断容器是否为空
 * remove():删除一个元素
 * size():返回元素数量(规模)
 * toArray():转化成数组并返回数组引用
 * iterator():迭代器
 * 
 * List:继承于Collection并新增了以下方法
 * add():指定位置添加元素
 * get(indexOf):获得索引处元素
 * set():重设指定元素值
 * indexOf():获取元素索引(位置)
 * lastIndexOf():返回元素最后一次出现位置
 * subList():截取列表的子列表,需给出起始位置和终止位置
 * listIterator():列表迭代器
 * 
 * ArrayList:动态数组,随机存取,会自动增大容量
 * 构造方法:
 * ArrayList():默认构造一个空表
 * ArrayList(int):构造一个已知大小的表
 * ArrayList(ArrayList):复制构造一个已有表
 *  
 * LinkedList:链表,插入删除快速,也可以自动增大容量
 * 实现方法
 * addFirst():首部添加元素
 * addLast():尾部添加元素
 * getFirst():获得表头元素
 * getLast():获得表尾元素
 * removeFirst():删除首部元素
 * removeLast():删除尾部元素
 */
public class Collection_and_List {
	//利用LinkedList构造一个栈结构以及队列结构
	static class Stack
	{
		private LinkedList l;
		Stack(){l=new LinkedList();}
		public void push(Object o)	//入栈
		{
			l.addFirst(o);	//头插法,头元素为最新插入元素
		}
		public void pop()			//出栈
		{
			l.removeFirst();
		}
		public Object top()			//返回栈顶元素
		{
			return l.getFirst();
		}
		public int size() {return l.size();}	//返回栈的规模
		public void clear() {l.clear();}		//清空栈
		
	}
	static class Queue
	{
		private LinkedList l;
		Queue(){l=new LinkedList();}
		public void enter(Object o)		//入队
		{
			l.addFirst(o);
		}
		public void leave()			//出队
		{
			l.removeLast();
		}
		public Object head() {return l.getLast();}//取队首元素
		public Object end() {return l.getFirst();}//取队尾元素
		public int size() {return l.size();}	//返回队列规模
		public void clear() {l.clear();}		//清空队列
	}
	public static void main(String[] args) {
	//测试ArrayList的功能	
		ArrayList a=new ArrayList();
		a.add("Animal");
		a.add("Dog");
		a.add("Cat");
		a.remove(0);
		for(int i=0;i<a.size();i++)System.out.println("动物:"+a.get(i));
	//测试创建的栈和队列
		Stack s=new Stack();
		for(int i=0;i<5;i++)//输入元素
		{
			s.push(i);
		}
		while(s.size()!=0)	//输出容器元素并清空
		{
			System.out.print(s.top()+" ");
			s.pop();
		}
		Queue q=new Queue();
		for(int i=0;i<5;i++)//输入元素
		{
			q.enter(i);
		}
		for(int i=0;i<5;i++)//输入容器元素
		{
			q.enter(i);
		}
		q.clear(); 			//清空容器
		if(s.size()==q.size())
		{
			System.out.println("栈和队列都已空");
		}
	}
}

Set和Iterator:

package Container;
import java.util.*;
/*
 * 迭代器:容器指针
 * 格式:Iterator<实例化类型>来定义指针
 * 容器(Collection):
 * iterator():返回迭代器值(Iterator)
 * 迭代器(Iterator):
 * next():第一次指向首个元素,依次指向下一元素。
 * hasNext():判断是否还有下个next值(即下个元素)
 * 
 * Set接口:实现类有HashSet、TreeSet、LinkedSet
 * 俩个特点:不能有重复元素,并且元素没有顺序之分
 * 
 * HashSet:哈希表,是一种顺序加链式结构,通过除以散列因子求余判断当前在数组中位置(hashCode()),定位具体链表后再通过比较判断
 * 元素是否与链表中的值 相等(equals())。
 * TreeSet:实现二叉排序树表(红黑树)后得到的Set,插入和删除比HashSet慢,但优势是元素根据排序规则保持有序
 * 二叉排序树(红黑树)特点:左小右大,中序遍历(左中右)后得到一个有序数组
 * LinkedHashSet:是HashSet的子类,插入元素用链表串起来,可以按元素插入顺序排序
 */
public class Set_and_Iterator {
	static class employee{
		int id;
		employee(int id){this.id=id;}
		public int hashCode() {		//原返回余数的函数,现通过id判断是否为同一对象,即散列码为id
			return this.id;
		}
		public boolean equals(Object o) {	//判断相等函数,原相同余数的函数在此函数判断链表是否有同一元素,现直接判断id
											//是否相等
			employee e=(employee) o;
			if(id==e.id)return true;	//相等,已存在相同id对象
			else return false;			//不相等,不存在相同id对象
		}
	}
	public static void main(String[] args) {
		Set<Integer> s=new HashSet<Integer>();
		//添加0-100里除以6的余数(即范围为0-6的数)
		for(int i=0;i<100;i++)
		{
			s.add(i%6);
		}
		for(Iterator<Integer> it=s.iterator();it.hasNext();)
		{
			System.out.print(it.next()+" ");
		}
		System.out.println();
		//当容器添加的不是常规对象(int,float,String等)类型时,需重写hashCode()函数和equals()函数
		s.clear();
		Set<employee> set=new HashSet<employee>();
		set.add(new employee(1));
		set.add(new employee(1));
		set.add(new employee(1));
		for(Iterator<employee> it=set.iterator();it.hasNext();)
		{
			System.out.print(it.next().id+" ");
		}
		System.out.println();
		HashSet<Integer> hashset=new HashSet<Integer>();
		TreeSet<Integer> treeset=new TreeSet<Integer>();
		LinkedHashSet<Integer> linkedhashset=new LinkedHashSet<Integer>();
		for(int i=0;i<5;i++)
		{
			int temp=(int)(Math.random()*100);
			Integer t=new Integer(temp);
			hashset.add(t);
			treeset.add(t);
			linkedhashset.add(t);
			System.out.println("第"+i+"次随机数为:"+t);
		}
		System.out.println("HashSet:"+hashset);
		System.out.println("TreeSet:"+treeset);
		System.out.println("LinkedHashSet:"+linkedhashset);
	}

}

Map:

package Container;
import java.util.*;
import java.util.Map.Entry;
/*
 * Map:一个键值(key)对应一个对象(value)的容器,并且没有排序
 * 提供以下接口:
 * put(K,V):增添一对键值,若已存在键,则替换值
 * putAll(Map):复制容器Map
 * clear():清空容器键值对
 * remove(Object):删除某个指定键值
 * get(Object):通过键,查找值,找不到返回null
 * size():返回键值对个数
 * isEmpty():判断容器是否为空
 * keySet():返回容器所有键的Set视图
 * values():返回容器所有值得Collection视图
 * entrySet():返回容器所有键值的Set视图
 * containsKey(Object):判断是否包含键
 * containsValue(Object):判断是否包含值
 */
public class Map_ {
	public static void main(String args[])
	{
		Map<Integer,String>m=new HashMap<Integer,String>();
		m.put(1,"yellow");
		m.put(2,"red");
		m.put(3,"color");
		m.put(3,"green");	//测试当已存在键时是否替代值
		System.out.println("Map:"+m);
		m.remove(2);		//删除指定键的键值对
		System.out.println("Map:"+m);
		m.put(2,"red");
		
		//遍历方式:由于Map没有提供iterator()函数,而是用keySet(),values()和entrySet()三个方法取代
		//方法一
		Collection<String> c=m.values();
		for(Iterator<String> it=c.iterator();it.hasNext();) {
			System.out.print(it.next()+" ");
		}
		System.out.println();
		//方法二
		Set<Integer> s=m.keySet();
		for(Iterator<Integer> it=s.iterator();it.hasNext();) {
			System.out.print(it.next()+" ");
		}
		System.out.println();
		//方法三
		/*
		 * Entry对象:把键值当成一个对象,用来转换Map与其它容器(Set)容器的参数不匹配问题
		 * 也提供了获取键,值,以及设置值的方法
		 * getKey():获取当前键值对里的键
		 * getValue():获取当前键值对里的值
		 * setValue(V):重新设置当前键值对里的值
		 */
		Set<Entry<Integer,String>> set=m.entrySet();
		for(Iterator<Entry<Integer,String>>it=set.iterator();it.hasNext();) {
			/*Entry<Integer,String> e=it.next();
			System.out.print(e.getKey()+"---->"+e.getValue()+"  ");*/
			System.out.println(it.next()+" ");
		}
		System.out.println();
	}
}

泛型:

package Container;
import java.util.*;
/*
 * 泛型:一般与容器搭配使用,使用泛型后容器会明确所装元素类型
 * 三种使用方法:
 * 容器实例化使用:所有容器名后+<实例化类型>
 * 定义方法:权限后+<T>,统一变量用T定义
 * 定义接口(纯抽象类):类名后+<T>
 */
//利用LinkedList类+泛型知识构造一个对任何类型都能使用的栈结构

public class wide_type {
	static class Stack<T>			//已经泛型化的接口(类)所有方法不必再一次泛型
	{
		private LinkedList<T> l;
		Stack(){l=new LinkedList<T>();}
		public void push(T e)
		{
			l.addFirst(e);
		}
		public T top()
		{
			return l.getFirst();
		}
		public void pop()
		{
			l.removeFirst();
		}
		public int size() {return l.size();}
		public void clear() {l.clear();}
	}
	//利用LinkedList类+泛型知识构造一个对任何类型都能使用的队列结构
	static class Queue<T>{
		private LinkedList<T> l;		//因为所有容器都是泛型化的,所以只能把他们实例化为T类型
		Queue(){l=new LinkedList<T>();}
		public void enter(T e) {	//入队
			l.addFirst(e);
		}
		public void leave() {		//出队
			l.removeLast();
		}
		public T head() {			//返回队首元素
			return l.getLast();
		}
		public T end() {			//返回队尾元素
			return l.getFirst();
		}
		public int size() {			//返回队列规模
			return l.size();
		}
		public void clear() {l.clear();}	//清空队列
	}
	public static void main(String agrs[])
	{
		List a=new ArrayList();
		a.add("Dog");
		//String str=a.get(0);	//错误:Object转换成String必须使用(String)强制转换
		//使用泛型后容器会明确所装元素类型
		List<String> l=new ArrayList<String>();
		l.add("Dog");
		String str=l.get(0);
		
		//java容器装对象(String)等,数组装基础类型Array
		//错误示例:Stack<int> s=new Stack<int>();
		Stack<String> s=new Stack<String>();
		s.push("狗吠");
		s.push("猫叫");
		s.push("狼嚎");
		System.out.println("栈顶:"+s.top());
		s.clear();
		Queue<String> q=new Queue<String>();
		q.enter("狗吠");
		q.enter("猫叫");
		q.enter("狼嚎");
		System.out.println("队首:"+q.head()+"  队尾:"+q.end());
		q.clear();
		System.out.println("栈规模:"+s.size()+"队列规模:"+q.size());
	}
}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值