1.集合
-
Java集合类是一种特别有用的工具类
,可用于
存储数量不等的对象
,并可以
实现常用 的数据结构,如栈、队列等
。除此之外,
Java集合还可用于保存具有映射关系的关联 数组
。
Java集合大致可分为
List、Set、Queue和Map
四种体系
。
集合的接口简易图:
1.1 四种体系
-
List
:
代表有序、 重复的集合
;
-
Set
:
代表无序、不可重复的集合
;
-
Map
:
代表具有映射关系的集合
;
-
Queue
:
代表一种队列集合实现。(Java5之后)
1.2 Set集合
-
Set 集合的特征
:
存储的元素(引用数据类型) 无序的,不可重复的
。
-
Set
:
Set 具有与 Collection 完全一样的接口,只是行为上不同,Set 不保存重复的元素。Set 接口存储一组唯一,无序的对象
。
-
SortedSet:继承于Set保存有序的集合
。
——————————————
1.2.1 HashSet
下面展示一些
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.add("ac");
set.add("hello");
set.add("java");
set.add("sql");
set.add("oracle");
set.add("jack");
set.add("zee");
set.add("zee");
System.out.println(set.toString());
System.out.println(set.size());
set.addAll(hSet);
System.out.println(set.toString());
System.out.println(set.contains("dahuang"));
System.out.println(set.hashCode());
set.remove("dahuang");
System.out.println(set.toString());
Object[] objs = set.toArray();
for(Object obj:objs){
String str = (String)obj;
System.out.println(str+" ");
}
System.out.println("\n==============================");
for(String str:set){
System.out.println(str+" ");
}
System.out.println("\n=============================");
Iterator<String> iterator = set.iterator();
while(iterator.hasNext()){
System.out.println(iterator.next()+" ");
}
}
}
以上代码打印输出:
——————————————————
下面展示一些
SetDemo 2 代码片
。
public class SetDemo2 {
public static void main(String[] args) {
Set set = new HashSet<>();
set.add(1);
set.add(15);
set.add(26);
set.add(3);
set.add(7);
System.out.println(set.toString());
}
}
以上代码打印输出:
————————————————————
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;
}
}
下面展示一些
测试类 代码片
。
public class Test {
public static void main(String[] args) {
Student stu = new Student("张伟",8,"女");
Student stu1 = new Student("李漂亮",18,"男");
Student stu2 = new Student("杨丹",28,"女");
Student stu3 = new Student("杨丹",28,"女");
Set<Student> stus = new HashSet<Student>();
stus.add(stu);
stus.add(stu1);
stus.add(stu2);
stus.add(stu3);
System.out.println(stu2.hashCode());
System.out.println(stu3.hashCode());
System.out.println(stu2.equals(stu3));
for(Student student : stus){
System.out.println(student);
}
}
}
以上两联代码打印输出:
————————————————————
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+" ");
}
}
}
以上代码打印输出:
————————————————————
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学生类:
TreeSetDemo:
TreeSetDemo2:
TreeSetDemo3:
————————————————————
小练习:
注册 登录
Admin 类。 用户名,密码。
集合。 不能重复。
登录。 判断集合中是否有对象。
public class HomeWork {
public static void main(String[] args) {
}
}