第48节:Java当中的集合框架
2021-06-19 23:07
标签:int xxx 数据结构 集合框架 asm 博客 cas 数据类型 exception 在我们班里有 结果来了一位插班生,该同学因为觉得学 为了解决新同学的问题,老师们重新创建一个空间(重复创建一个新的数组),为了能够更好的解决问题,老师提供了可以不断扩大空间(Java提供了集合,当数据多了,个数不稳定时,可以用集合)。 在 虽然数组和集合类都是容器 数组也可以存储对象的,但是因为长度的固定,限制了数组,而集合的长度是可以改变的,在数组中可以用来存储基本数据类型,而在集合中只能用来存储对象,但是可以存的对象可以是不同类型的对象哦~ 数组可以存放基本数据类型和对象 在 集合框架的构成及分类 类集框架,那么什么是类集框架,集合的种类有哪些,类集框架的基础结构。 类集框架是一组类和接口的集合,位于java.util包当中,是用来用户存储和管理对象的,在这个类集合框架中,我们主要学习的为三大类,分别是集合,列表和映射。 集合,列表,映射 类集合框架是 其实在 所以的根接口为 注意一些 这些都跟三大类有关。 在 来解释:一些 出现了集合框架,有了很多种容器可以完成很多需求,我们区分容器是靠着每个容器的数据结构不同,去命名了解的。 迭代是 接口 迭代器的方法 在 Collection 往后余生,唯独有你 第48节:Java当中的集合框架 标签:int xxx 数据结构 集合框架 asm 博客 cas 数据类型 exception 原文地址:https://www.cnblogs.com/dashucoding/p/9689769.htmlJava当中的集合框架
01
50
位同学,就有50
位对象。// 简书作者:达叔小生
Student[] stus = new Student[20];
IT
行业好,才要求老师转专业的。可以结果没有多余的空位了,数组里的长度都是安排好的,没有空间了。Java
中,数组的长度是不可以改变的,在数组中存储的是同种类型的元素,可以存储基本数据类型值;但是集合的长度是可以改变的,存储的是对象,对象的类型可以不一样,集合是存储对象的,当数据多,即对象多的时候,可以用集合来存储。
为什么用集合来解决问题,数组难道就不可以吗?
集合只能存放对象Java
语言这种面向对象语言中,对一切事物的体现都可以用对象的形式来表现,为了对对象进行方便的操作,Java
就提供了集合这个名词,用来存储对象一种方式。02
类集合框架主体
// 简书作者:达叔小生
java.util
类 Vector
// 简书作者:达叔小生
public class Vector
jdk
提供的一类类和接口,主要掌握集合,列表,映射,集合是无序的,集合中的元素不允许是重复的,列表是有序的,列表中的元素是允许重复的,映射是以键值对的方式来存储数据,键是不可重复的,值是可以重复的。jdk
最早的时候jdk1.0
版的时候,提供的集合是很少的,但是随着发展,到jdk1.2
的时候就变多了,为了营造更多的需求,就有了集合框架。
Collection.
// 简书作者:达叔小生
// 集合框架体系
Iterator
->Collection
-> Map
// 简书作者:达叔小生
Collection
-> Set 无序不重复 -> 无序HashSet,需要排序TreeSet
-> List 有序可重复 -> 查,改ArrayList,增删LinkedList
Map
-> 无序 HashMap
-> 排序 TreeMap
03
顶级Iterator和Collection
Collection
的相关方法,可以去官方下载文档来看哦:
方法
说明
add(E e)
返回的是
boolean
的类型,确保collection
包含指定的元素
addAll(Collection extends E> e)
返回的是
boolean
的类型,将指定collection
中的所有元素添加到collection
中
clear()
返回
Void
,移除此collection
中的所有元素
contains(Object o)
返回
boolean
类型,如果此collection
包含指定的元素,则返回true
containsAll(Collection> c)
返回
boolean
类型,如果此collection
包含指定collection
中的所有元素,则返回true
equals(Object o)
返回
boolean
类型,比较collection
与指定对象是否相等
hashCode()
返回的是
int
类型,返回此 collection
的哈希码值
isEmpty()
返回
boolean
类型,如果此collection
不包含元素,则返回true
iterator()
返回
Iterater
,返回在此collection
的元素上进行迭代的迭代器
size()
返回
Int
类型,返回此collection
中的元素数Collection
接口:它定义了集合体系中最共性的功能// 简书作者:达叔小生
java.util
接口 Collection
// 简书作者:达叔小生
public interface Collection
Collection
接口为层次结构中的根接口,由上方提供的图片得知,Collection
表示为一组对象,这些对象称为Collection
的元素,在这个类集合框架中,我们主要学习的为三大类,分别是集合,列表和映射。collection
允许有重复的元素,有的不允许,有的是有序的,有的是无序的。java
中,jdk
不提供Collection
接口的实现,都是由它的子接口进行实现的。Collection是List和Set的父类
List
和Set
也都是由再次向下,由它们的子类接口实现的。// 简书作者:达叔小生
Set 和 HashSet 为Set的实现类 使用
Iterator -> Collection -> Set -> HashSet
Iterator -> Collection -> List -> ArrayList
collection
允许有重复的元素,有的不允许,有的是有序的,有的是无序的。是因为数据结构的不同。为 ->
三大类集合,列表,映射04
三大类集合,列表,映射
Set
为集合,在集合中的对象是不按照顺序排列的,并且是没有重复的对象的。
简单为:无序,无重复。List
为列表,中在列表中的对象是由顺序的排序的,并且是有重复的对象。
简单为:有序,有重复。Map
为映射,在集合中的每个元素都有一个键对象和一个值对象,在Map
中键是不可以重复的,值是可以重复的。
键不可重复,值可以重复;
Set
为无序集合,无序无重复;List
为有序集合,有序有重复;Map
为映射,存储键值对,键不可重复,值可以重复;05
Collection
是所有集合类的根接口,有人问那么这个呢?Collections
,其实这个是集合操作的工具类。// 简书作者:达叔小生
Collection
-> Set
-> HashSet
-> LinkedHashSet
-> TreeSet
-> List
-> ArrayList
-> Vector
-> LinkedList
-> Queue
-> LinkedList
-> PriorityQueue
-> Map
-> Hashtable
-> HashMap
-> TreeMap
-> LinkedHashMap
// 简书作者:达叔小生
import java.util.List;
import java.util.ArrayList;
public class Demo{
public static void main(String args[]){
// 创建列表的实现类对象
ArrayList
Set
和 HashSet
为Set
的实现类 使用// 简书作者:达叔小生
import java.util.Set;
import java.util.HashSet;
public class Demo{
public static void main(String args[]){
HashSet
Iterator 接口 迭代器对象
Java
中的用来表示取元素的名称而已,Iterator
接口 迭代器对象用来取元素,无论是什么数据结构,最终共性的取出方式,取值是一个一个取的,在之前先要判断是否有值,如果有就取一个,如果没有就over
,不取。// 简书作者:达叔小生
Iterator - > Collection -> Set - > HashSet
hasNext() next()
it.hasNext() 是否还有元素
it.next() 取出元素
Iterator -> Collection -> List -> ArrayList
Set 和 HashSet 为Set的实现类 使用
// 简书作者:达叔小生
hasNext() 判断是否还有下一个元素
next() 取出这个元素,然后把游标移动到下一位
Iterator -> Collection -> Set -> HashSet
// 简书作者:达叔小生
import java.util.Set;
import java.util.HashSet;
import java.util.Iterator;
public class Demo{
public static void main(String args[]){
HashSet
Iterator
迭代器 iterator()
// 简书作者:达叔小生
Iterator
Iterable
在此collection
的元素上进行迭代iterator()
可以获取具体容器中的迭代器对象
迭代器返回的是Iterator
接口
方法
说明
hasNext()
返回
boolean
类型,如果有元素可以迭代(取出),则返回true
next()
返回
E
,返回迭代的下一个元素
remove()
返回
void
,从迭代器中移除迭代器返回的最后一个元素
java.util.NoSuchElementException
没有这个元素异常it.next()
// 简书作者:达叔小生
public class IteratorDemo{
public static void mian(String[] args){
// 创建集合对象
Collection collection = new ArrayList();
// 存储的是对象的引用
// 集合存储不了基本数据类型
// collection.add(12); == 内部效果 collection.add(Integer.valueOf(12); // 自动装箱
// 即在jdk1.5后,存储的是基本数据类型包装类的对象
collection.add("ab");
collection.add("bbb");
collection.add("cbbb");
collection.add("dbbbb");
// 获取迭代器 iterator()方法
Iterator it = collection.iterator();
while(it.hasNext(){
System.out.println(it.next());
}
//
//可以转变为
// for(Iterator it = collection.iterator(); it.hasNext(); ) {}
//
// 每个存储对象的长度
for(Iterator it = collection.iterator(); it.hasNext(); ){
// 取出对象
Object object = it.next();
// 向下转型,才能使用元素的特殊方法
String str = (String)object;
// 打印对象长度
System.out.println(str.length());
}
}
}
// 简书作者:达叔小生
// 可以使用这个,节省内存
for(java.util.Iterator iterator = collection.iterator(){
Object object = (Object) iterator.next();
}
06
// 简书作者:达叔小生
// 创建一个Student类
public class Student{
// 定义私有的String变量 name
private String name;
// 定义私有的int变量 age
private int age;
// 创建构造函数
public Student(){
super();
}
public Student(String name, int age){
super();
this.name = name;
this.age = age;
}
// 创建toString()方法
@Override
public String toString(){
return "Student [name=" + name + ", age=" + age + "]";
}
// 创建getXxx(),setXXX()方法
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;
}
// equals();
@Override
public boolean equals(Object obj){
if(this == obj){
return;
}
if(! (obj instanceof Student) ){
throw new ClassCastException("类型错误");
}
Student stu = (Student)obj;
return this.name.equals(stu.name) && this.age == stu.age;
}
}
equals()
方法// 简书作者:达叔小生
public class CollectionDemo {
public static void main(String[] args){
// 创建集合对象
Collection collection = new ArrayList();
// 添加元素 添加一个地址两次为重复
Student stu = new Student( "a",12 );
collection.add( stu );
collection.add( new Student("b",13) );
collection.add( new Student("c",14) );
collection.add( new Student("d",15) );
for(Iterator it = collection.iterator(); it.hasNext(); ){
Student student = (Student) it.next();
System.out.println(student.getName());
}
}
}
Map 与 HashMap(Map的实现类) 的使用
Map
为映射,映射中的每个元素都有一个键对象和一个值对象,在Map
中键是不可以重复的,值是可以重复的。从jdk1.2
有了这个类。// 简书作者:达叔小生
java.util
Interface Map
Map
是一种对象,将keys
键和values
值建立起一种映射关系,一个map
不能有重复的keys
,每个key
只能唯一映射到一个值。// 简书作者:达叔小生
import java.util.Map;
import java.util.HahMap;
public class Demo{
public static void main(String args[]){
HashMap
Map
中键是不可以重复的,值是可以重复的。如果map
中添加一样的键,那么新的值会覆盖老的值。
// 简书作者:达叔小生
public interface List
// 简书作者:达叔小生
java.util
接口 List
public interface List
// 简书作者:达叔小生
public class ListDemo{
public static void main(String[] args){
// List
List list = new ArrayList();
// 添加元素
list.add( new Student("a",12) );
list.add( new Student("b",13) );
list.add( new Student("c",14) );
// 插入元素
// list.add( 1, new Student("d",15) );
// list.remove(44);
// 角标越界IndexOutOfBoundsException)
// list.set( 2, new Student("dashucoding", 16) );
// 循环出对象
for(Iterator it = List.iterator(); it.hasNext(); ){
Student stu = (Student) it.next();
System.out.println(stu);
}
// 获取对象
Object obj = list.get(1);
System.out.println(obj);
// 获取对象
for(int i = 0; i
简书作者:达叔小生
90后帅气小伙,良好的开发习惯;独立思考的能力;主动并且善于沟通
简书博客: https://www.jianshu.com/u/c785ece603d1结语