集合(一)

集合的分类

集合分为两大接口:Collection接口和Map接口

Collection接口
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;

public class CollectionTest02 {
	public static void main(String[] args) {

		Collection<String> c = new ArrayList<String>();
		//长度
		System.out.println(c.size());
		// 判断是否为空
	
		System.out.println(c.isEmpty());
		//添加数据
		System.out.println(c.add("你好"));
		System.out.println(c.add("再见"));
		System.out.println(c.add("明天"));
		System.out.println(c.size());
		System.out.println(c.isEmpty());
		//判断集合中是否存在某数据   相当于equals 比较一样
		System.out.println(c.contains("你好1"));
		System.out.println(c);
		//移除 某元素
		System.out.println(c.remove("再见"));
		System.out.println(c);
		//清除所有
		//c.clear();
		Iterator<String> it=c.iterator();
		while(it.hasNext()){
			String str =it.next();
			System.out.println(str);
		}
	}
}

自定义一个集合

public class CollectionTest01 {
	//它可以存储五个数据
	public static void main(String[] args) {
		MyCollcetion<String> m=new MyCollcetion<String>();
		m.set("异常", 0);
		String s=m.get(0);
		System.out.println(s);
	}
}

// 自定义一个集合
class MyCollcetion<E>{
	// 创建类未继承父类,则默认继承Object类(Object类是所有类的父类) 可以存储各种类型元素
	Object[] object = new Object[5];
	// 进行传值
	public void set(E e, int index) {
		object[index] = e;
	}
	// 进行获取值
	public E get(int index) {
		return (E) object[index];
	}
}
Collection接口分为Set接口和List接口

Set接口和List接口都是继承Collection接口而出现的)
Set接口:不允许添加重复元素
List接口:允许添加重复元素,相当于数组,按角标来处理元素
Set接口:不允许添加重复元素,没有角标

import java.util.HashSet;
import java.util.Set;
import java.util.ArrayList;
import java.util.List;

public class CollectionTest05 {
	public static void main(String[] args) {
		Set<String> s = new HashSet<String>();
		// set 不允许重复 以及不连续的
		// set 是没有下标的
		s.add("aa");
		s.add("bb");
		s.add("aa");
		System.out.println(s);

		// List 的方法和使用
		List<String> l = new ArrayList<String>();
		l.add("aa");
		l.add("bb");
		l.add("cc");
		// 在指定位置插入(可通过角标来操作元素)
		l.add(2, "插队的");
	}
}
List接口与数组的区别

数组是定长的,数组在定义时就已经固定其存储大小
List集合接口是不定长的,可以随意添加不定个数元素

List实现类

ArrayList LinkedList Vector Stack
ArrayList:常用类,底层用数组实现.添加、删除速度慢,但查询速度快
LinkedList:双链表形式存储,添加、删除速度快,但查询慢
Vector:是线程安全类,性能差.在多线程中使用
Stack:Vector类的子类,是模拟堆栈的实现类

Set实现类

TreeSet HashSet LinkedHashSet
TreeSet是自动排序,不允许添加null值
HashSet 是哈希表排序,允许添加null值
LinkedHashSet是链表类型,不排序,允许添加null值

List Set常用类基本用法
import java.util.ArrayList;
import java.util.HashSet;
import java.util.TreeSet;
import java.util.LinkedList;
import java.util.List;
import java.util.Set;

public class CollectionWork01 {
	public static void main(String[] args) {
		// ArrayList 集合
		List<Student> list1 = new ArrayList<Student>();
		list1.add(new Student(01, "李国威"));
		list1.add(new Student(02,"洪少丰"));
		// for each 输出
		for (Student student : list1) {
			System.out.println(student);
		}
		//LinkedList集合
		List<Student> list2 = new LinkedList<Student>();
		list2.add(new Student(01, "熊欣"));
		list2.add(new Student(02, "汪祥"));
		list2.add(new Student(02, "汪祥"));
		
		for (Student student : list2) {
			System.out.println(student);
		}
		
		
		//Set 的 hashSet 集合
		Set<Student> set = new HashSet<Student>();
		set.add(new Student(01,"陈凯"));
		set.add(new Student(02, "王旭"));
		set.add(new Student(02, "111"));
		for (Student student : set) {
			System.out.println(student);
		}
		//Set TreeSet集合(自动排序)
		TreeSet<String> set2 = new TreeSet<String>();
		set2.add("A");
		set2.add("C");
		set2.add("D");
		set2.add("B");
		
		for (String string : set2) {
			System.out.println(string);
		}
	}
	}
}

class Student {
	private int id;
	private String name;

	public Student() {
	}

	public Student(int id, String name) {
		this.id = id;
		this.name = name;
	}

	@Override
	public String toString() {
		return "Student [id=" + id + ", name=" + name + "]";
	}

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + id;
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Student other = (Student) obj;
		if (id != other.id)
			return false;
		return true;
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值