java集合框架知识点

java集合介绍:

变量:表示的内存中的一个空间,只能保存确定类型的单个数据

数组:表示的是内存中的多个连续的空间,这些空间中可以存储多个同类型的数据。

后期继续学习面向对象技术,我们在程序中开始创建对象,使用对象。当在程序中创建的多少越来越多的时候,我们就需要将这些对象也存储起来。

 

需要存储对象:肯定是需要容器。

         变量:可以,要求这个变量必须是引用变量,但只能存储单个对象

         数组:可以,但是它要求存储的对象个数是固定的。

         字符串缓冲区:不可以,因为它中的数据最后都会被转成字符串。

 

Java中提供了另外一类容器:集合,它专门负责存储程序中的对象。

开发中使用频率最高的三个集合对象:

         ArrayList:

         HashSet:

         HashMap:

 

集合是类容器:它也具备了容器最基本的操作方式:

         增、删、改、查、判断、遍历。

 

在Java中设计的集合容器比较多,它们都可以存储对象,但是当对象被存储到这些容器中之后,容器会对其中的对象进行不同的处理。

 

学习集合的重点:知道每个集合的底层是怎么处理其中存储的对象。知道每个集合的底层数据结构。

 

由于集合容器太多,需要程序员知道每个集合自己的处理方式,不容易记忆以及使用。于是Java又对这些集合容器的共性操作行为进行的抽取和总结,最后给我们形成了一套所有集合容器都应该具备的基本的操作方式。

 

Java中定义Collection接口,这个接口中定义了所有集合的共性的操作规则。Java中的所有集合容器都是按照Collection中定义的规则做的实现,我们在开发中只要按照Collection接口中定义的规则,就能够轻易的去操作各个集合容器。

List集合,插入数据一个一个挨着插,不能跳着插入,数据可重复,List接口继承了Collection接口

常用的有ArrayList,LinkedList,

ArrayList增删慢 查询快;底层是数组

LinkedList 增删快 查询慢;底层是链表

Set集合:没有脚本、不能包含重复元素,没有特有的迭代器,只能使用Iterator进行遍历,保证插入元素的唯一性必须重写HashCold()方法和equals()方法;

实现Set接口的三个实现类为:HashSet;LinkedHashSet;TreeSet;

HashSet底层是哈希表;通过插入元素的哈希码判断插入的位置;插入无序的,

LinkedHashSet:底层是链表,能记住插入顺序;增删快;

TreeSet:底层是二叉树,插入完后,能大小排列,从大到小排列,按插入元素的哈希码大小拍的

示例代码如下:

package com.set集合重写才唯一性;










public class Person implements Comparable{
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Person(String name, int age) {
super();
this.name = name;
this.age = age;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + age;
result = prime * result + ((name == null) ? 0 : name.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Person other = (Person) obj;
if (age != other.age)
return false;
if (name == null) {
if (other.name != null)
return false;
} else if (!name.equals(other.name))
return false;
return true;
}
public Person() {
super();
}
@Override
public String toString() {
return "Person [name=" + name + ", age=" + age + "]";
}
@Override
public int compareTo(Person p) {
// TODO Auto-generated method stub
int number  = this.age - p.age;   //按照年龄排序

int number2 = number==0?this.name.length()-p.name.length():number;

int number3 = number2==0?this.name.compareTo(p.name):number2;

return number3;
}


}

package com.set集合重写才唯一性;


import java.util.Comparator;


public  class MyCompare implements Comparator{


public int compare(Person o1, Person o2) {
// TODO Auto-generated method stub
int namber=o1.getName().length()-o2.getName().length();
int namber1=namber==0?o1.getName().compareTo(o2.getName()):namber;
int namber2=namber1==0?o1.getAge()-o2.getAge():namber1;
return namber2;
}


// public int compare(Person p1, Person p2) {
//
// int number = p1.getName().length() - p2.getName().length();
//
// int number2 = number==0?p1.getName().compareTo(p2.getName()):number;
//
// int number3 = number2==0?p1.getAge() - p2.getAge():number2;
//
// return number3;
//
// }





}

package com.set集合重写才唯一性;


import java.util.Comparator;
import java.util.Iterator;
import java.util.TreeSet;


public class Test {
public static void main(String[] args) {
TreeSet tst=new TreeSet();
tst.add(new Person("p1001",18));
tst.add(new Person("p1002",34));
tst.add(new Person("p1003",23));
tst.add(new Person("p1004",67));
tst.add(new Person("p1004",67));
Iterator it=tst.iterator();
while(it.hasNext()){
System.out.println(it.next());
}
// 第二种自定义比较器方法      public TreeSet(Comparator comparator)
System.out.println("==========================");
TreeSet tst1=new TreeSet(new MyCompare());

tst1.add(new Person("p1004",18));
tst1.add(new Person("p1002",34));
tst1.add(new Person("p1001",23));
tst1.add(new Person("p1003",67));
Iterator it1=tst1.iterator();
while(it1.hasNext()){
System.out.println(it1.next());
}
// public TreeSet(Comparator comparator) 比较器比较
System.out.println("===========================");
TreeSet tst2=new TreeSet(new Comparator(){


@Override
public int compare(Person o1, Person o2) {
// TODO Auto-generated method stub
int namber=o1.getName().length()-o2.getName().length();
int namber1=namber==0?o1.getName().compareTo(o2.getName()):namber;
int namber2=namber1==0?o1.getAge()-o2.getAge():namber1;
return namber2;
}

});

tst2.add(new Person("p1004",18));
tst2.add(new Person("p1002",34));
tst2.add(new Person("p1001",23));
tst2.add(new Person("p1003",67));
Iterator it2=tst2.iterator();
while(it2.hasNext()){
System.out.println(it2.next());
}
}
}

输出结果为:

Person [name=p1001, age=18]
Person [name=p1003, age=23]
Person [name=p1002, age=34]
Person [name=p1004, age=67]
==========================
Person [name=p1001, age=23]
Person [name=p1002, age=34]
Person [name=p1003, age=67]
Person [name=p1004, age=18]
===========================
Person [name=p1001, age=23]
Person [name=p1002, age=34]
Person [name=p1003, age=67]
Person [name=p1004, age=18]

你可能感兴趣的:(java集合框架知识点)