看啥推荐读物
专栏名称: 西边的虫虫
目录
今天看啥  ›  专栏  ›  西边的虫虫

JAVA 集合 (一)

西边的虫虫  · CSDN  ·  · 2019-10-31 10:18

1.集合

  • Java集合类是一种特别有用的工具类 ,可用于 存储数量不等的对象 ,并可以 实现常用 的数据结构,如栈、队列等 。除此之外, Java集合还可用于保存具有映射关系的关联 数组 Java集合大致可分为 List、Set、Queue和Map 四种体系

集合的接口简易图:
在这里插入图片描述

1.1 四种体系

  1. List 代表有序、 重复的集合
  2. Set 代表无序、不可重复的集合
  3. Map 代表具有映射关系的集合
  4. Queue 代表一种队列集合实现。(Java5之后)

1.2 Set集合

  • Set 集合的特征 存储的元素(引用数据类型) 无序的,不可重复的

  • Set Set 具有与 Collection 完全一样的接口,只是行为上不同,Set 不保存重复的元素。Set 接口存储一组唯一,无序的对象

  • SortedSet:继承于Set保存有序的集合
    ——————————————

1.2.1 HashSet

  • HashSet 内部存储是一个散列表。 HashSet 内部实现是一个HashMap.

  • 集合存在的意义,就是存储对象。

下面展示一些 SetDemo 代码片


		public class SetDemo {

	public static void main(String[] args) {
		// 接口       =   实现类
		Set<String> set = new HashSet<String>();
		
		// 实现类      =     实现类
		HashSet<String> hSet = new HashSet<String>();
		hSet.add("dahuang");
		
		// Set提供的方法。
		set.add("ac");
		set.add("hello");
		set.add("java");
		set.add("sql");
		set.add("oracle");
		set.add("jack");
		set.add("zee");
		
		// Set 不可重复存放元素
		set.add("zee");
		
		// 遍历Set集合。
		System.out.println(set.toString());
		// 数组的长度
		System.out.println(set.size());
		
		// addall
		set.addAll(hSet);
		System.out.println(set.toString());
		
		//clear 清楚集合中所有元素
//		set.clear();
//		System.out.println(set.size());
		
		// 是否包含某个元素
		System.out.println(set.contains("dahuang"));
		
		// hashCode
		System.out.println(set.hashCode());
		
		// 删除某个元素
		set.remove("dahuang");
		System.out.println(set.toString());
		
		// 集合的遍历1: toArray
		Object[] objs = set.toArray();
		for(Object obj:objs){
			String str = (String)obj;
			System.out.println(str+" ");
		}
		System.out.println("\n==============================");
		// 集合的遍历 2: forEach
		for(String str:set){
			System.out.println(str+" ");
			
		}
		System.out.println("\n=============================");
		// 集合的遍历 3: Iterator  迭代器 游标
		
		Iterator<String> iterator = set.iterator();
		while(iterator.hasNext()){// hasNext 下一位是否还有值。
			System.out.println(iterator.next()+" ");// 输入下一位的值。
			
		}
		
		
	}

}

以上代码打印输出:
SetDemo
——————————————————
下面展示一些 SetDemo 2 代码片


		public class SetDemo2 {

	public static void main(String[] args) {
		Set set = new HashSet<>();
		set.add(1);// Integer
		set.add(15);
		set.add(26);
		set.add(3);
		set.add(7);
		
		System.out.println(set.toString());
		
		
	}

}

以上代码打印输出:
SetDemo2
————————————————————

1.3 Hashset 集合存储对象的原理:

  • hashset 存储对象, 先判断对象的hashcode值是否存在于散列表中。如果没有,就存入Set集合。

  • 如果有,在判定,两个对象的equals 是否相同。如果相同,不存储。如果requals 不同,则存入。

  • set集合中,有两个相同的hashcode。 但不可能有两个相同的equals。

下面展示一些 Student 代码片


	public class Student {
	public String name;
	public int age;
	public String sex;
	
	public Student(){
		super();
	}
	public Student(String name, int age, String sex){
		super();
		this.name = name;
		this.age = age;
		this.sex = sex;
	}
	@Override
	public String toString(){
		return "Student [name=" + name + ", age=" + age + ", sex=" + sex + "]";
		
	}
	
	@Override
	public int hashCode(){
		final int prime = 31;
		int result = 1;
		result = prime * result + age;
		result = prime * result + ((name == null) ? 0 : name.hashCode());
		result = prime * result + ((sex == null) ? 0 : sex.hashCode());
		return result;
		
	}
	
	public boolean equsls(Object obj){
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Student other = (Student) obj;
		if (age != other.age)
			return false;
		if (name == null){
			if (other.name !=null)
				return false;
		} else if (!name.equals(other.name))
			return false;
		if (sex == null){
			if(other.sex != null)
				return false;
		} else if (!sex.equals(other.sex))
			return false;
		return false;
	}
	
//	@Override
//	public int hashCode() {
//		return name.hashCode()+age+sex.hashCode();
//	}
//	
//	@Override
//	public boolean equals(Object obj) {
//		Student student = (Student)obj;
//		if(student.name.equals(this.name) && student.age == age && student.sex.equals(this.sex)){
//			return true;
//		}else{
//			return false;
//		}
//	}
	

}

下面展示一些 测试类 代码片


		public class Test {

	public static void main(String[] args) {
		Student stu = new Student("张伟",8,"女");
		Student stu1 = new Student("李漂亮",18,"男");
		Student stu2 = new Student("杨丹",28,"女");
		// stu2 和stu3 算不算重复     //不算
		Student stu3 = new Student("杨丹",28,"女");
		
		// 创建集合
		Set<Student> stus = new HashSet<Student>();
		stus.add(stu);
		stus.add(stu1);
		stus.add(stu2);
		stus.add(stu3);
		
		// hashCode
		System.out.println(stu2.hashCode());
		System.out.println(stu3.hashCode());
		
		// 在判断reques 方法是否相同。
		System.out.println(stu2.equals(stu3));
		
		// 遍历集合
		for(Student student : stus){
			System.out.println(student);
			
		}
	}

}

以上两联代码打印输出:

Hashset 集合存储对象

————————————————————

1.4 LinkedHashSet

  • LinkedHashSet 有链表顺序,不能重复的。
  • Link 链表。

下面展示一些 LinkedHashSetDemo 代码片


		public class LinkedHashSetDemo {

	public static void main(String[] args) {
		Set<String> set = new LinkedHashSet<>();
		set.add("hello");
		set.add("java");
		set.add("mysql");
		set.add("oracle");
		set.add("html");
		set.add("css");
		set.add("css");// 不能重复
		set.add("css");// 不能重复
		
		for(String str : set){
			System.out.println(str+" ");
		}
	}

}

以上代码打印输出:
LinkedHashSetDemo

————————————————————

1.5 Tree 树

  • Tree 树
  • Tree 树形结构, 有序的
  • TreeSet 是可排序的集合 默认按照字典或数字顺序排列

下面展示一些 学生 Student 代码片


		public class Student implements Comparable<Student>{
	public String name;
	public int age;
	public String sex;
	
	public Student(){
		super();
	}
	
	public Student(String name, int age, String sex){
		super();
		this.name = name;
		this.age = age;
		this.sex = sex;
		
	}
	
	@Override
	public String toString(){
		return "Student [name=" + name + ", age="+ age + ",sex=" + sex + "]";
		
	}
	
	@Override
	public int compareTo(Student o){
		return o.age-age;
	}

}

下面展示一些 TreeSetDemo 代码片


		public class TreeSetDemo {
	
	public static void main(String[] args){
		Set<String> set = new TreeSet<>();
		set.add("1hello");
		set.add("2java");
		set.add("5aaaa");
		set.add("3aaa");
		set.add("7blue");
		set.add("4gree");
		set.add("6full");
		
		for(String str : set){
			System.out.println(str);
		}
	}

}

下面展示一些 TreeSetDemo 2代码片


	public class TreeSetDemo2 {

	public static void main(String[] args) {
		Student stu = new Student("张伟",8,"女");
		Student stu1 = new Student("李漂亮",18,"男");
		Student stu2 = new Student("杨丹",28,"女");
		TreeSet<Student> set = new TreeSet<Student>(new MyComparable());
		set.add(stu);
		set.add(stu1);
		set.add(stu2);
		// 遍历集合。
		for(Student student : set){
			System.out.println(student);
		}
		
	}

}
// 自定义排序规则类。
class MyComparable implements Comparator<Student>{
	
	@Override
	public int compare(Student o1, Student o2){
		
		return o2.age-o1.age;
	}
	
}

下面展示一些 TreeSetDemo3 代码片


		public class TreeSetDemo3 {

	public static void main(String[] args) {
		Student stu = new Student("张伟",8,"女");
		Student stu1 = new Student("李漂亮",18,"男");
		Student stu2 = new Student("杨丹",28,"女");
		
		
		System.out.println(stu.compareTo(stu1));
		
		TreeSet<Student> set = new TreeSet<Student>();
		set.add(stu);
		set.add(stu1);
		set.add(stu2);
		
		//遍历集合。
		for(Student student : set){
			System.out.println(student);
		}
		
	}

}

以上代码打印输出:
Student学生类:
Student
TreeSetDemo:
TreeSetDemo
TreeSetDemo2:
TreeSetDemo2
TreeSetDemo3:
TreeSetDemo3
————————————————————

小练习:
注册 登录

Admin 类。 用户名,密码。
集合。 不能重复。
登录。 判断集合中是否有对象。


		public class HomeWork {

	public static void main(String[] args) {
		

	}

}



原文地址:访问原文地址
快照地址: 访问文章快照