Collection---List 和 Set

Collection—List 和 Set

集合的接口和实现类在 java.util.*;

list有序

常用集合框架类图

list集合的结构:

List接口实现者线程安全性(是否同步)数据存储结构数据的增长查询检索效率插入、删除的效率是否重复是否Null
ArrayList不安全线性数组默认起始10,每次增长50%可以可以
LinkedList不安全双向链表没有起始容量,每次增长一个可以可以
Vector安全线性数组默认起始10,每次增长1倍可以可以
链表

Arraylist(Vector)线性数组的结构:开辟连续的存储空间、查询按照线下标查找迅速,删除的时候如果从中间删除就要把前面所有的数据向前挪动,从后边删除正常。

Linkedlist(双向链表):存放数据和指向下一个的地址,在空间随机存放,添加数据的时候在前面将指针更改,其他的位置不需要改动

package com.chinasoft.data;

public class Node {
	//节点的数据
	Object value;
	//下一个的位置
	Node next;
	//第几个数据
	int index;
	
	public Node(int index,Object value) {
		this.index = index;
		this.value = value;
		this.next = null;
	}
}

package com.chinasoft.data;

public class LinkedList {
	//首先定义头结点
	Node head;
	public LinkedList() {
		head = null;
	}
	//添加数据、如果头结点是空的创建新的
	public void add(Object value) {
		if(head == null) {
			head = new Node(0,value);
		}else {
			Node now = head;
			//如果下一个不是空的
			while(now.next!=null) {
				//下一个传递过来
				now = now.next;
			}
			//下一个是空的就重新创建一个
			now.next = new Node(now.index+1,value);
		}
	}
	
	//遍历到底有多少个
	public int size() {
		int count = 0;
		for(Node now=head;now!=null;now=now.next) {
			count++;
		}
		return count;
	}
	
	//找寻第几个元素
	public Object get(int index) {
		for(Node now=head;now!=null;now=now.next) {
			if(now.index == index) {
				return now.value;
			}
		}
		return null;
	}
	
}

数组集合arraylist进行查询遍历

package com.chinasoft.jh;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class ListDemo {

	public static void main(String[] args) {
		
		List list = new ArrayList();
		
		list.add(1);
		list.add(null);
		list.add("abc");
		//for循环遍历
		
//		for(int i=0;i<list.size();i++) {
//			Object obj = list.get(i);
//			
//			System.out.println(obj);
//		}
//		
//		//for :
//		
//		for(Object obj : list) {
//			System.out.println(obj);
//		}
		
		//使用Iterator迭代器遍历
		
		Iterator it = list.iterator();
		//如果下一个有值为true
		while(it.hasNext()) {
            //将这个值取出来
			Object obj = it.next();
			System.out.println(obj);
		}
	}

}

arraylist常用的方法

List接口:

add(E e) 添加
add(int index, E element)添加什么值在哪里
clear() 删除
contains(Object o)有没有这个值返回布尔类型
get(int index)
remove(int index)
remove(Object o)
set(int index, E element)
size()
subList(int fromIndex, int toIndex) ,截取部分数组数据开始结束,左闭右开
toArray() 转成数组

package com.chinasoft.jh;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class ListDemo2 {

	public static void main(String[] args) {
		
		List<String> list = new ArrayList<String>();
		
		list.add("123");
		list.add("abc");
		
		
		list.add(1, "xyz");
		//删除
//		list.remove(2);
//		list.remove("xyz");
		list.set(0, "234");
		//比较这个里面有没有这个值
		boolean b = list.contains("234");
		
		System.out.println(b);
		//删除全部的数据
		//list.clear();
		
		//for循环遍历
		
		for(int i=0;i<list.size();i++) {
			Object obj = list.get(i);
			
			System.out.println(obj);
		}
	}

}

转换为数组

package com.chinasoft.jh;

import java.util.ArrayList;
import java.util.List;

public class ListDemo3 {

	public static void main(String[] args) {
		
		List<Integer> list = new ArrayList<Integer>(20);
		
		list.add(3);
		list.add(7);
		list.add(2);
		list.add(1);
		
		List<Integer> subList = list.subList(1, 3);

		for(int i=0;i<subList.size();i++) {
			System.out.println(subList.get(i));
		}
		//转换为数组
		Object[] ins = subList.toArray();
		
		for(Object i : ins) {
			System.out.println(i);
		}

	}

}

set无序

无序没有下标

Set实现者线程的安全性值是否可以重复是否可以为空数据结构排序数据增长效率
HashSet不安全的No—只有1个可以,只能空一次散列表(哈希表)只对数字有效16个 当总量75% 增长1倍
TreeSet不安全的No—只有1个不可以为空–异常二叉树(红黑树)都有效节省点空间中低

Set接口:无序集合–没有下标的
add(E e) :
clear() 删除
contains(Object o)有没有这个值返回布尔类型
remove(Object o)
size()
toArray() 转成数组

结构:任意的向空间存储没有顺序,不过会去掉重复的,数字会排序,可以是空的,

package com.chinasoft.jh;

import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;

public class SetDemo {

	public static void main(String[] args) {
		
		Set<Integer> set = new HashSet<Integer>();
		set.add(8);
		set.add(1);
		set.add(5);
		set.add(3);
		set.add(111);
		//set.add(null);
		
//		for(int i : set) {
//			System.out.println(i);
//		}
		
		Iterator<Integer> it = set.iterator();
//		
		while(it.hasNext()) {
			int x = it.next();
			System.out.println(x);
		}
	}
}

treeset其中插入的不可以是空的,因为数据结构是二叉树要进行比较

package com.chinasoft.jh;

import java.util.Set;
import java.util.TreeSet;

public class SetDemo2 {

	public static void main(String[] args) {

		Set set = new TreeSet();
		set.add(8);
		set.add(1);
		// set.add(null);
		set.add(5);
		set.add(3);
		set.add(1);

		// set.add(null);

		for (Object i : set) {
			System.out.println(i);
		}

//		Iterator<Integer> it = set.iterator();
//		
//		while(it.hasNext()) {
//			int x = it.next();
//			System.out.println(x);
//		}
	}
}

Map

Map—>散列表(键值对)
apple–苹果
Map这种集合里的每一个元素存储的是一对值 key-value
put
get
keySet()

Map的实现类线程执行效率数据结构数据增长查找、删除、修改、插入
HashMap不安全链式数组初始长度16 当达到75% 增长约为1倍
Hashtable安全链式数组初始长度10
TreeMap不安全红黑树
package com.chinasoft.jh;

import java.util.Map;
import java.util.TreeMap;

public class MapDemo {

	public static void main(String[] args) {
		
		Map<String,String> map = new TreeMap<String,String>();
		
		//向map集合中追加元素
		map.put("apple","苹果");
		map.put("banana","香蕉");
		map.put("pear","大鸭梨");
		map.put("apple","苹果111");//修改
		map.put("x",null);
		map.put("y",null);
		//通过key去获取value
		String value = map.get("apple");
		
		System.out.println(value);
		
		//遍历map--->遍历所有的key 
		//Set<String> keys = map.keySet();
		for(String key : map.keySet()) {
			String val = map.get(key);
			if("香蕉".equals(val)) {
				System.out.println(key);
			}
		}
		
		System.out.println(map.size());
		
		System.out.println(map.get("x"));
	}

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值