集合框架

一、Collection、List、Set、Map之间的关系图:


二、测试是List、Set、Map三大容器的基本特性

1、List的底层是数组;

2、Set的底层是链表;

3、Map的底层是Map的底层结构就是:数组+链表;

<1>、测试类代码:


<2>、测试List的基本特点的代码:

特点描述:List数组是有序、可重复的。

(1)、对ArrayList()的测试:


(2)、对LinkedList()的测试:


(3)、对Vertord()的测试:


<3>、测试Set的基本特点的代码:

特点描述:Set集合是无序、不可重复的。

(1)、对HashSet()的测试:


<4>、对Map的基本特点测试:

特点描述:Map映射中同时存放键和值,当键重复时值就会被覆盖。

(1)、对HashMap()的测试:


(2)、对HashTable()的测试:


三、自制的List、Set、Map的源代码

1、自制ArrayList()源代码:

public class SxtArrayList {

	public Object[] elementData;
	public int size;

	// 得到当前容器的中所装的元素的个数
	public int size() {
		return size;
	}

	// 判断容器是否为空
	public boolean isEmpty() {
		return size == 0;
	}

	// 得到指定位置的元素
	public Object get(int index) {
		rangeCheck(index);
		
		return elementData[index];
	}

	// 初始化容器的容量
	public SxtArrayList(int initialCapacity) {
		super();
		if (initialCapacity < 0) {
			try {
				throw new Exception();
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		this.elementData = new Object[initialCapacity];
	}

	// 初始化容器的容量
	public SxtArrayList() {
		this(10);
	}

	// 数组扩容和数据的拷贝
	public void add(Object obj) {
		if (size == elementData.length) {
			Object[] newArray = new Object[size * 2 + 1];
			System.arraycopy(elementData, 0, newArray, 0, elementData.length);
			elementData = newArray;
		}
		elementData[size++] = obj;
	}
	//用于移除指定位置的元素
	public Object remove(int index){		
		rangeCheck(index);
		Object oldValue =  elementData[index];

		int numMoved = size - index - 1;
		if (numMoved > 0)
		    System.arraycopy(elementData, index+1, elementData, index,
				     numMoved);
		elementData[--size] = null; 

		return oldValue;
	}

	//创建一个私有的判断方法,
	private void rangeCheck(int index){
		if (index >= size) {
			try {
				throw new Exception();
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
	}
	
	public static void main(String[] args) {
		SxtArrayList list = new SxtArrayList(3);

		list.add("111");
		list.add("222");
		list.add("333");
		list.add("444");
		list.add("555");
		list.add("666");

		System.out.println(list.get(5));
		System.out.println(list.remove(2));
		System.out.println(list.size());	
	}
}
2、自制LinkedList()代码:

public class SxtLinkedList {

	public Note first;
	public Note last;
	public int size;

	
	//删除指定位置的结点
	public void remove(int index) {

		Note temp = Note(index);
		if (temp != null) {
			Note up = temp.previous;
			Note down = temp.next;
			up.next = down;
			down.previous = up;
			size--;
		}     
	}
   //得到一个结点
	private Note Note(int index) {
		Note temp = null;
		if (first != null) {
			temp = first;
			for (int i = 0; i < index; i++) {
				temp = temp.next;
			}
		}
		return temp;
	}
    //增加元素
	public void add(Object obj) {
		Note n = new Note();
		if (first == null) {
			n.setPrevious(null);
			n.setObj(obj);
			n.setNext(null);

			first = n;
			last = n;
		} else {
			n.setPrevious(last);
			n.setObj(obj);
			n.setNext(null);
			last.setNext(n);

			last = n;
		}
		size++;
	}

	public int size() {
		return size;
	}

	public static void main(String[] args) {
		SxtLinkedList list = new SxtLinkedList();
		list.add("aaa");
		list.add("bbb");
		list.add("ccc");
		System.out.println(list.size());
		list.remove(1);
		System.out.println(list.size());
	}
}
3、自制MashSet()代码:

public class SxtLinkedList {

	public Note first;
	public Note last;
	public int size;

	
	//删除指定位置的结点
	public void remove(int index) {

		Note temp = Note(index);
		if (temp != null) {
			Note up = temp.previous;
			Note down = temp.next;
			up.next = down;
			down.previous = up;
			size--;
		}     
	}
   //得到一个结点
	private Note Note(int index) {
		Note temp = null;
		if (first != null) {
			temp = first;
			for (int i = 0; i < index; i++) {
				temp = temp.next;
			}
		}
		return temp;
	}
    //增加元素
	public void add(Object obj) {
		Note n = new Note();
		if (first == null) {
			n.setPrevious(null);
			n.setObj(obj);
			n.setNext(null);

			first = n;
			last = n;
		} else {
			n.setPrevious(last);
			n.setObj(obj);
			n.setNext(null);
			last.setNext(n);

			last = n;
		}
		size++;
	}

	public int size() {
		return size;
	}

	public static void main(String[] args) {
		SxtLinkedList list = new SxtLinkedList();
		list.add("aaa");
		list.add("bbb");
		list.add("ccc");
		System.out.println(list.size());
		list.remove(1);
		System.out.println(list.size());
	}
}
4、自制的HashMap()代码:

public class SxtMap01 {

	SxtEntry[] arr = new SxtEntry[990];
	int size;

	public void put(Object key, Object value) {
		SxtEntry e = new SxtEntry(key, value);		
		for (int i = 0; i < size; i++) {
			if (arr[i].key.equals(key)) {
				arr[i].value = value; //键值重复的处理
			}
		}
		arr[size++] = e;
	}

	public Object get(Object key) {
		for (int i = 0; i < size; i++) {
			if (arr[i].key.equals(key)) {
				return arr[i].value;
			}
		}
		return null;
	}

	public boolean containsKey(Object key) {
		for (int i = 0; i < size; i++) {
			if (arr[i].key.equals(key)) {
				return true;
			}
		}
		return false;
	}

	public static void main(String[] args) {
		SxtMap01 map = new SxtMap01();
		map.put("小黄", "dog");
		map.put("大黄", "cat");
		map.put("小黄", "pig");
		String str = (String) map.get("小黄");
		System.out.println(str);
		boolean b = map.containsKey("小黄");
		System.out.println(b);
	}

}

class SxtEntry {
	Object key;
	Object value;

	public SxtEntry(Object key, Object value) {
		super();
		this.key = key;
		this.value = value;
	}

	public SxtEntry() {

	}
}





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值