java集合框架知识点

xiaoxiao2021-02-28  74

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<Person>{ 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<Person>{ 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<Person> tst=new TreeSet<Person>(); 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<Person> it=tst.iterator(); while(it.hasNext()){ System.out.println(it.next()); } // 第二种自定义比较器方法      public TreeSet(Comparator<? super E> comparator) System.out.println("=========================="); TreeSet<Person> tst1=new TreeSet<Person>(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<Person> it1=tst1.iterator(); while(it1.hasNext()){ System.out.println(it1.next()); } // public TreeSet(Comparator<? super E> comparator) 比较器比较 System.out.println("==========================="); TreeSet<Person> tst2=new TreeSet<Person>(new Comparator<Person>(){ @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<Person> 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]

转载请注明原文地址: https://www.6miu.com/read-52080.html

最新回复(0)