java的集合的作用_java的集合

f050d9f6a9c2bace40ab1bd2d2fe435b.png

5b7fc093d6941da11fa15c748481b812.png

7a2e420ab1d0f6d5b7964191cd7d96a1.png

Conllection常用功能

publicboolean add(E e): 把给定的对象添加到当前集合中public voidclear(); 情况集合中所有的元素,但是不删除集合,集合是空而已publicboolean remove(e);把给定的对象在当前的集合中删除,集合中存在则删除并返回true,不存在则返回falsepublicboolean contains(E e);判断当前集合是否含有给定对象publicboolean isEmpty(); 判断当前集合是否给空public intsize();返回集合的元素个数public Object[] toArray() 把集合中的元素,存储到数组中

public classDemonCollection {public static voidmain(String[] args) {//创建集合对象,可以使用多态,接口指向一个实例类

Collection coll = new ArrayList<>();

System.out.println(coll);//重写了toString方法

boolean bl = coll.add("quan");

coll.add("QQQ");

System.out.println(coll);//删除元素

System.out.println(coll.remove("QQQ"));

System.out.println(coll.remove("QQ"));//判断是否包含元素

System.out.println(coll.contains("quan"));//判断是否为空

System.out.println(coll.isEmpty());//集合元素的多少

System.out.println(coll.size());

Object[] arr=coll.toArray();

System.out.println(arr);

coll.clear();

System.out.println(coll.isEmpty());

}

}

结果:

[]

[quan, QQQ]true

false

true

false

1[Ljava.lang.Object;@1b6d3586true

Iterator 迭代器

3fd18e102df93ad2123963ad989672a3.png

迭代器用于对集合进行百年来

boolean hasNext() 如果有元素可以迭代,则返回true

判断集合中还有没有下一个元素,如果有则返回true,没有则返回false

E next() 返回迭代的下一个元素。取出集合的下一个元素

Iterator 地带其,是一个接口,我们二u发直接使用,需要使用Iterator

接口的实现对象,获取实现类的方法比较特殊

Conllection 接口中国有一个方法,叫iterator(),这个方法返回的就是迭代器的实现对象

迭代器使用步骤:

使用集合中的方法iterator获取迭代器 实现类对象,使用Iterator接口接受(多态)

使用Iterator 接口中的方法hashnext 判断是否有下一个元素

使用Iterator 接口中的方法next ,取出集合中的下一个元素

注意:

使用集合中的方法创建迭代器的时候,使用Iterator接口接受(多态)

Iterator也有泛型,迭代器的泛型跟着集合走,集合是什么泛型,迭代器就是什么泛型

如果没有元素还进行取出,会返回异常:java.util.NoSuchElementException*/

public classDemon {public static voidmain(String[] args) {

Collection coll = new ArrayList<>();

coll.add("QQQQ");

coll.add("AAA");

coll.add("BBB");

coll.add("DDDD");//多态 接口 实现类对象

Iterator it =coll.iterator();

boolean bl=it.hasNext();

System.out.println(bl);

String st=it.next();

System.out.println(st);//知道长度用for,不知道长度用while

while(it.hasNext()){

System.out.println(it.next());

}

}

}/*true

QQQQ

AAA

BBB

DDDD*/

1898ba444967fc57aa15702114008f19.png

增强for循环

/*Collection extends Iterable,所有单鞋集合恶斗可以使用增强for

public interface Iterable

实现此接口允许对象成为“for-each loop”语句的目标。

增强for循环,用来遍历结合和数组

格式:

for(集合/数组的数据类型 变量名:集合名/数组名){

sout(变量名)

}*/

public classDemoFor {public static voidmain(String[] args) {

demo01();

demo();

}//遍历集合

private static voiddemo(){

ArrayList arrl = new ArrayList<>();

arrl.add("QQQ");

arrl.add("WWW");

arrl.add("RRR");for(String str:arrl){

System.out.println(str);

}

}//遍历数组

private static voiddemo01(){int [] arr = {1,1,2,3,4};for(inti:arr){

System.out.println(i);

}

}

}/*1

1

2

3

4

QQQ

WWW

RRR*/

List

59568841599a9345c684dbaaab70710c.png

IndexOutOfBoundsException越界异常:

public classd1 {public static voidmain(String[] args) {

List list = new ArrayList<>();

list.add("a");

list.add("b");

list.add("c");//安装存的方式输出,打印的不是地址,证明重写的toString

System.out.println(list);

list.add(1,"D");

System.out.println(list);//移除a元素,返回移除的元素

System.out.println(list.remove(0));

System.out.println(list);//特换指定索引的元素,并返回所替换的元素内容

System.out.println(list.set(0,"ddd"));

System.out.println(list);//list集合遍历方式

for (int i = 0;i

System.out.println(list.get(i));

}

System.out.println("############");//d迭代器遍历

Iterator it =list.iterator();while(it.hasNext()){

System.out.println(it.next());

}

System.out.println("############");//增强for循环

for(String s :list){

System.out.println(s);

}

}

}

List子类

ArrayList集合:

2b87c00f7b5eeabfaba65734b9c3d8ca.png

linkedList集合

53c3ff394cec353fb4dafd014202d10c.png

/*特点:

底层是一个链表结构,查询慢,增删块

里面包含大量操作单点首位方法,不能用多态

注意:使用LinkedList 集合特有的方法,不能使用多态*/import java.sql.ClientInfoStatus;

import java.util.LinkedList;

import java.util.List;public classLinkListT {public static voidmain(String[] args) {

show1();

show2();

}private static voidshow2(){

LinkedList lisked = new LinkedList<>();

lisked.add("QQ");

lisked.add("DAWI");

lisked.add("UUUU");

String first=lisked.getFirst();

System.out.println(first);

String second=lisked.getLast();

System.out.println(second);

lisked.clear();

}private static voidshow1(){

LinkedList linked = newLinkedList();

linked.add("A");

linked.add("B");

linked.add("C");

System.out.println(linked);

linked.addFirst("ONE");

System.out.println(linked);

linked.addLast("last");

System.out.println(linked);

}

}/*[A, B, C]

[ONE, A, B, C]

[ONE, A, B, C, last]

Vector,认识就好

Vector类实现了可扩展的对象数组。 像数组一样,它包含可以使用整数索引访问的组件。 但是, Vector的大小可以根据需要增长或缩小,以适应在创建Vector之后添加和删除项目。

Set接口

/*set特点:

不允许存储重复元素

没有索引,没有索引的算法不能通过普通for遍历

HashSet特点:

不允许存储重复元素

没有索引,没有索引的算法不能通过普通for遍历

是一个无序的集合,存储元素和取出元素的顺序有可能不一致

底层是一个哈希表结构,查询结构非常块*/

public classDDD1 {public static voidmain(String[] args) {

Set set = new HashSet<>();set.add(21);set.add(3);set.add(4);set.add(21);//使用迭代器遍历

Iterator it = set.iterator();while(it.hasNext()){

System.out.println(it.next());

}

System.out.println("############");for (Integer i:set){

System.out.println(i);

}

}

}/*3

4

21

############

3

4

21*/

HashSet集合存储数据结构—哈希表

/*哈希值:是一个十进制的整数,由系统随机给出

(就是对象的地址值,是一个逻辑地址,是模拟出来得到地址,不是数据实际存储的物理地址)

在Object 类有一个方法,可以获取对象的哈希值

int hashCode()

返回对象的哈希码值。*/

public classHashCode {public static voidmain(String[] args) {//person类默认继承了object类,可以使用hashCode方法

Person person = newPerson();int h1 =person.hashCode();

System.out.println(h1);

Person person2= newPerson();int h2 =person2.hashCode();

System.out.println(h2); toString 源码

//public String toString() {//return getClass().getName() + "@" + Integer.toHexString(hashCode());//}

System.out.println(person);//这里的哈希值是上面哈希值的16进制表示方法

System.out.println(person2);//字符串类的哈希值

String s = new String("abc");

String s1= "abc";

String ss= new String("abc");

System.out.println(s.hashCode());

System.out.println(ss.hashCode());

System.out.println(s1.hashCode());

}

}/*460141958

1163157884

quan.set.Person@1b6d3586

quan.set.Person@4554617c

96354

96354

96354*/

8917e053dbe9f9557ce81e36296f3c91.png

06db734be226dc11eb17cce0ea90bad5.png

HashSet存储自定义的元素:

//存储自定义类型元素//set集合保证元素唯一://存储的元素,必须重写hashVCode和equals方法

自定义的类:

public classPerson {privateString name;private intage;publicPerson() {

}public Person(String name, intage) {this.name =name;this.age =age;

}publicString getName() {returnname;

}public voidsetName(String name) {this.name =name;

}public intgetAge() {returnage;

}public void setAge(intage) {this.age =age;

}

@OverridepublicString toString() {return "Person{" +

"name='" + name + '\'' +

", age=" + age +

'}';

}

@Overridepublicboolean equals(Object o) {if (this == o) return true;if (o == null || getClass() != o.getClass()) return false;

Person person=(Person) o;return age == person.age &&Objects.equals(name, person.name);

}

@Overridepublic inthashCode() {returnObjects.hash(name, age);

}

}

hashset储存:

public classSetPerson {//要求同名同年龄的人,视为同一个人,只能村一次

public static voidmain(String[] args) {

HashSet hp = new HashSet<>();

Person p1= new Person("quan",22);

Person p2= new Person("quan",22);

Person p3= new Person("quan",11);

System.out.println(p1.hashCode());

System.out.println(p2.hashCode());

hp.add(p1);

hp.add(p2);

hp.add(p3);

System.out.println(hp);

}

}/*107941030

107941030

[Person{name='quan', age=11}, Person{name='quan', age=22}]*/

LinkedHashSet

/*java.util.LinkedHashSet集合 extends HashSet集合

LinkedHashSet集合提点:

底层是一个哈希表(数组+链表/红黑树)+链表

多了一个链表(就hi了元素的存储顺序),保证元素有序*/

public classLinkHashSet {public static voidmain(String[] args) {

HashSet set = new HashSet<>();set.add("www");set.add("abc");set.add("quan");set.add("abc");

System.out.println(set);//不允许重复,无序

LinkedHashSet linkedset = new LinkedHashSet<>();

linkedset.add("www");

linkedset.add("abc");

linkedset.add("quan");

linkedset.add("abc");

System.out.println(linkedset);//不允许重复,有序

}

}

操作集合的工具

29c64b66b90b242329389e4de4473611.png

/*sort方法的使用前提,

对排序的集合里面必须实现Comparable ,重写定义排序的规则

Comparable的排序规则

自己(this) - 参数:升序*/

public classDemo {public static voidmain(String[] args) {

ArrayList list = new ArrayList<>();//集合加入多个元素,因为addALL是静态方法

Collections.addAll(list,"A","tt","b","uu","B");

System.out.println(list);//打乱顺序,打乱集合的顺序

Collections.shuffle(list);

System.out.println(list);//自然排序

Collections.sort(list);

System.out.println(list);

ArrayList listInt = new ArrayList<>();

listInt.add(22);

listInt.add(21);

listInt.add(12);

listInt.add(42);

System.out.println(listInt);//sort list> 将集合中的元素安装默认规则排序

Collections.sort(listInt);//默认是升序排序

System.out.println(listInt);

ArrayList personlist = new ArrayList<>();

personlist.add(new Person("AA",12));

personlist.add(new Person("BB",9));

personlist.add(new Person("CC",82));

System.out.println(personlist);

Collections.sort(personlist);

System.out.println(personlist);

}

}

结果:

[A, tt, b, uu, B]

[A, B, b, tt, uu]

[A, B, b, tt, uu]

[22, 21, 12, 42]

[12, 21, 22, 42]

[Person{name='AA', age=12}, Person{name='BB', age=9}, Person{name='CC', age=82}]

[Person{name='BB', age=9}, Person{name='AA', age=12}, Person{name='CC', age=82}]

其中Person类:

package quan.kebvian;public class Person implements Comparable{privateString name;private intage;publicPerson() {

}public Person(String name, intage) {this.name =name;this.age =age;

}

@OverridepublicString toString() {return "Person{" +

"name='" + name + '\'' +

", age=" + age +

'}';

}publicString getName() {returnname;

}public voidsetName(String name) {this.name =name;

}public intgetAge() {returnage;

}public void setAge(intage) {this.age =age;

}

@Overridepublic intcompareTo(Person o) {//return 0;表示元素都是相同的//自定义比较的规则,比较两个人的年龄//return .getAge() - this.getAge();//年龄降序序排序

return this.getAge() - o.getAge();//年龄升序排序

}

}

Comparator和Comparable的区别

/*Comparable:自己(this)和别人(参数)比较,自己需要实现Comparable接口,重写比较规则

Comparator: 相当于找一个第三方的裁判,比较两个

Comparator 的排序规则

o1 -o2 升序*/

public classComparator {public static voidmain(String[] args) {

ArrayList listInt = new ArrayList<>();

listInt.add(22);

listInt.add(21);

listInt.add(12);

listInt.add(42);

System.out.println(listInt);

Collections.sort(listInt,new java.util.Comparator() {

@Overridepublic intcompare(Integer o1, Integer o2) {return o1 -o2;

}

});

System.out.println(listInt);

System.out.println("@@@@@@@@@@@@@@@@@");

ArrayList personlist = new ArrayList<>();

personlist.add(new Person("AA",12));

personlist.add(new Person("BB",90));

personlist.add(new Person("CC",12));

personlist.add(new Person("DD",9));

System.out.println(personlist);

Collections.sort(personlist,new java.util.Comparator() {

@Overridepublic intcompare(Person o1, Person o2) {return o1.getAge() -o2.getAge();

}

});

System.out.println(personlist);

Collections.sort(personlist,new java.util.Comparator() {

@Overridepublic intcompare(Person o1, Person o2) {int re = o1.getAge() -o2.getAge();//如果两个人的年龄相同,再使用姓名的首字母比较

if (re == 0){

re= o1.getName().charAt(0) -o2.getName().charAt(0);

}returnre;

}

});

System.out.println(personlist);

}

}

[22, 21, 12, 42]

[12, 21, 22, 42]

@@@@@@@@@@@@@@@@@

[Person{name='AA', age=12}, Person{name='BB', age=90}, Person{name='CC', age=12}, Person{name='DD', age=9}]

[Person{name='DD', age=9}, Person{name='AA', age=12}, Person{name='CC', age=12}, Person{name='BB', age=90}]

[Person{name='DD', age=9}, Person{name='AA', age=12}, Person{name='CC', age=12}, Person{name='BB', age=90}]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值