JAVA 集合 (一)

1.集合

  • Java集合類是一種特別有用的工具類,可用於存儲數量不等的對象,並可以實現常用 的數據結構,如棧、隊列等。除此之外,Java集合還可用於保存具有映射關係的關聯 數組Java集合大致可分爲List、Set、Queue和Map四種體系

集合的接口簡易圖:
在這裏插入圖片描述

1.1 四種體系

  1. List代表有序、 重複的集合
  2. Set代表無序、不可重複的集合
  3. Map代表具有映射關係的集合
  4. Queue代表一種隊列集合實現。(Java5之後)

1.2 Set集合

  • Set 集合的特徵存儲的元素(引用數據類型) 無序的,不可重複的

  • SetSet 具有與 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) {
		

	}

}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章