集合类
来源:互联网 发布:ai文件打开软件 编辑:程序博客网 时间:2024/06/16 12:02
集合类
定义:为了方便对多个对象的操作,就对对象进行存储,集合就是其中的一种方式
集合和数组的不同之处:
1,数组是固定长度的,集合是可变长度的
2,数组可以储存基本数据类型和引用型数据类型,集合只能存储引用数据类型
3,数据存储的元素必然是统一个数据类型,集合存储的对象是不同数据类型
数据结构:
数据结构就是容器中存储数据的方式,对于集合容器,有很多种。因为每一个容器的自身特点不同,其实原理在于每个容器的内部数据结构不同。
集合容器在不断向上抽取过程中。出现了集合体系。
1.Collection接口
提供的方法:
1,添加:
add(E a) 确保此collection包含指定的元素
addAll(Collection<? extends E>c)将指定collection中的所有元素都添加到此collection中。
2,删除
clear()将集合中的元素全删除,即清空集合
remove(Object o)从此collection中移除指定元素的单个实例,如果存在的话,注意:删除成功,集合的长度会改变。
removeAll(Collection<?>c)移除此collection中那些也包含在指定collection中的所有元素
3,判断
boolean isEmpty()如果此collection不包含元素,则返回true
4,获取
boolean contains(obj) :集合中是否包含指定元素 。
boolean containsAll(Collection) :集合中是否包含指定的多个元素。
int size() 返回此collection中的元素数
5,取交集
boolean retainAll(Collection<?>c)仅保留此collection中那些也包含在指定collection的元素。集合和数组一样,里面存的都是地址。
6,获取集合中所有元素:
Iterator iterator()返回在此collection的元素上进行迭代的迭代器
7,将集合变成数组:
toArray()返回包含此collection中所有元素的数组
toArray(T[]a)返回包含此collection中所有元素的数组,返回数组的运行时类型与指定数组的运行时类型相同。
hashCode()返回此collection的哈希码值。
注意:集合里存储的是应用地址
--------------------------------------------------------------------------------------------------------------------------
2.Iterator接口
迭代器:
其实就是集合的取出元素的方式,就把取出方式定义在集合的内部,这样取出方式就可以直接访问集合内部的元素,那么取出方式就被定义成了内部类,而每一个容器的数据结构不同,所以取出的动作细节也不一样,但是都有共性内容,判断和取出,那么可以将这些共性抽取,那么这个内部类都符合一个规则,该规则是Iterator。
方法:
1,boolean hasNext():如果仍有元素可以迭代,则返回true.
2,next():返回迭代的下一个元素
3,void remove():从迭代器指向的collection中移除迭代器返回的最后一个元素
Iterator it = coll.iterator();//获取容器中的迭代器对象,至于这个对象是是什么不重要。这对象肯定符合一个规则Iterator接口。
***Iterator方法是只能对元素进行判断,取出,删除的操作,如果想要其他的操作如添加,修改等,就需要使用其子接口,ListIterator,
3.List:有序(元素存入集合的顺序和取出的顺序一致),元素都有索引。元素可以重复。
ArrayList 底层是数组,特点:查询速度快。但是增删稍慢。
LinkedList:底层使用的是链表数据结构。特点:增删速度快,查询稍慢。
Vector:底层是数组数据结构,被arraylist取代了。
- ListIterator li=a1.listIterator();
- while(li.hasNext())
- {
- Object obj=li.next();
- if(obj.equals("java02"))
- li.add("java009");//添加
- li.set("java006");//修改
- }
add(index,element) :在指定的索引位插入元素。
3,获取:
Object get(index) :通过索引获取指定元素。
int indexOf(obj) :获取指定元素第一次出现的索引位,如果该元素不存在返回-1;所以,通过-1,可以判断一个元素是否存在。
List subList(start,end) :获取子列表。
4,修改:
Object set(index,element) :对指定索引位进行元素的修改。
5,获取所有元素:
ListIterator listIterator():list集合特有的迭代器。
第四讲 Set
一、概述
Set:元素是无序(存入和取出的顺序不一定一致),元素不可以重复。
|--HashSet:底层数据结构是哈希表。线程不同步。 保证元素唯一性的原理:判断元素的hashCode值是否相同。如果相同,还会继续判断元素的equals方法,是否为true。
|--TreeSet:可以对Set集合中的元素进行排序。默认按照字母的自然排序。底层数据结构是二叉树。保证元素唯一性的依据:compareTo方法return 0。
Set集合的功能和Collection是一致的。
二、HasSet
HashSet:线程不安全,存取速度快。
可以通过元素的两个方法,hashCode和equals来完成保证元素唯一性。如果元素的HashCode值相同,才会判断equals是否为true。如果元素的hashCode值不同,不会调用equals。
注意:HashSet对于判断元素是否存在,以及删除等操作,依赖的方法是元素的hashCode和equals方法
public class HashSetTreeSet {
/*
* 往hashSet集合中存入自定对象 姓名和年龄相同为同一个人,重复元素。去除重复元素 思路:1、对人描述,将人的一些属性等封装进对象
* 2、定义一个HashSet容器,存储人对象 3、取出
*/
public static void main(String[] args) {
HashSet hs = new HashSet();
hs.add(new Person("zhangsan", 1));
hs.add(new Person("zhangsan1", 11));
hs.add(new Person("zhangsan2", 12));
hs.add(new Person("zhangsan", 1));
Iterator iterator = hs.iterator();
while (iterator.hasNext()) {
Person person = (Person) iterator.next();
sop(person.getName() + "....." + person.getAge());
}
}
static class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = 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 boolean equals(Object obj) {
if (!(obj instanceof Person))
return false;
Person p = (Person) obj;
return this.name.equals(p.name) && this.age == p.age;
}
public int hashCode()
{
return this.name.hashCode()+this.age;
}
}
private static void sop(Object next) {
System.out.println(next);
}
1)第一种排序方式:自然排序
让元素自身具备比较性。元素需要实现Comparable接口,覆盖compareTo方法。这种方式也被称为元素的自然顺序,或者叫做默认顺序。
示例:
2)第二种方式:比较器
当元素自身不具备比较性时,或者具备的比较性不是所需要的。这时就需要让集合自身具备比较性。
在集合初始化时,就有了比较方式。定义一个比较器,将比较器对象作为参数传递给TreeSet集合的构造函数。
比较器构造方式:定义一个类,实现Comparator接口,覆盖compare方法。
- Map集合(集合类)
- 集合类 Map集合
- 集合类 List集合 / LinkedList集合
- 集合类
- 集合类
- 集合类
- 集合类
- 集合类
- 集合类
- 集合类...
- 集合类
- 集合类
- 集合类:
- 集合类
- 集合类
- 集合类
- 集合类
- 集合类
- 时间日期
- 4g可以免费吗?
- UVA 196 一道好玩的输入处理+拓扑排序题
- 让Dev C++支持C++11
- 如何写出格式良好的博客
- 集合类
- 微信小程序讲解(1)——宏观了解,心中有数。
- 解决-Dmaven.multiModuleProjectDirectory system property is not set. Check $M2_HOME environment variabl
- 2016年12月2日学习总结----malloc的实现原理
- 初创公司难以跨越的障碍:需求挖掘
- 电信初装费是否合理
- C语言都能用来干吗、我为什么要学C语言
- 指针的基础知识补充
- Go语言学习(九)文件操作