第48节:Java当中的集合框架

Java当中的集合框架

01

在我们班里有50位同学,就有50位对象。

// 简书作者:达叔小生
Student[] stus = new Student[20];

结果来了一位插班生,该同学因为觉得学IT行业好,才要求老师转专业的。可以结果没有多余的空位了,数组里的长度都是安排好的,没有空间了。

为了解决新同学的问题,老师们重新创建一个空间(重复创建一个新的数组),为了能够更好的解决问题,老师提供了可以不断扩大空间(Java提供了集合,当数据多了,个数不稳定时,可以用集合)。

Java中,数组的长度是不可以改变的,在数组中存储的是同种类型的元素,可以存储基本数据类型值;但是集合的长度是可以改变的,存储的是对象,对象的类型可以不一样,集合是存储对象的,当数据多,即对象多的时候,可以用集合来存储。

虽然数组和集合类都是容器
为什么用集合来解决问题,数组难道就不可以吗?

数组也可以存储对象的,但是因为长度的固定,限制了数组,而集合的长度是可以改变的,在数组中可以用来存储基本数据类型,而在集合中只能用来存储对象,但是可以存的对象可以是不同类型的对象哦~

数组可以存放基本数据类型和对象
集合只能存放对象

Java语言这种面向对象语言中,对一切事物的体现都可以用对象的形式来表现,为了对对象进行方便的操作,Java就提供了集合这个名词,用来存储对象一种方式。

02

类集合框架主体

集合框架的构成及分类

// 简书作者:达叔小生
java.util
类 Vector<E>
java.lang.Object
 -> java.util.AbstractCollection<E>
  -> java.util.AbstractList<E>
   -> java.util.Vector<E>
// 简书作者:达叔小生
public class Vector<E>
extends AbstractList<E>
implements List<E>, RandomAccess,Cloneable,Serializable

类集框架,那么什么是类集框架,集合的种类有哪些,类集框架的基础结构。

类集框架是一组类和接口的集合,位于java.util包当中,是用来用户存储和管理对象的,在这个类集合框架中,我们主要学习的为三大类,分别是集合,列表和映射。

集合,列表,映射

类集合框架是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<E>,返回在此collection的元素上进行迭代的迭代器
size() 返回Int类型,返回此collection中的元素数

Collection接口:它定义了集合体系中最共性的功能

// 简书作者:达叔小生
java.util
接口 Collection<E>
所有超级接口:
Iterable<E>
// 简书作者:达叔小生
public interface Collection<E>
extends Iterable<E>

Collection接口为层次结构中的根接口,由上方提供的图片得知,Collection表示为一组对象,这些对象称为Collection的元素,在这个类集合框架中,我们主要学习的为三大类,分别是集合,列表和映射。

注意一些collection允许有重复的元素,有的不允许,有的是有序的,有的是无序的。

这些都跟三大类有关。

java中,jdk不提供Collection接口的实现,都是由它的子接口进行实现的。

Collection是List和Set的父类

ListSet也都是由再次向下,由它们的子类接口实现的。

// 简书作者:达叔小生
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<String> arrayList = new ArrayList<String>();
 // 添加数据
 arrayList.add("a");
 arrayList.add("b");
 arrayList.add("c");
// 移除
 arrayList.remove(1);
 // 获取数据
 String s = arrayList.get(1);
 System.out.println(s);
 // 获取长度
 int a = arrayList.size();
 // 打印所有元素
 for(int i=0; i<arrayList.size(); i++){
  String s = arrayList.get(i);
  System.out.println(s);
 }
 }
}

SetHashSetSet的实现类 使用

// 简书作者:达叔小生
import java.util.Set;
import java.util.HashSet;
public class Demo{
 public static void main(String args[]){
  HashSet<String> hashSet = new HashSet<String>();
 Set<String> set = hashSet;
 // 实现类向上转型为接口
 // 同理 Set<String> set = new HashSet<String>();
 // 添加元素
 set.add("a");
 set.add("b");
 set.add("c");
 set.add("d");
 // 获取集合中的元素长度
 int a = set.size();
 }
}

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<String> hashSet = new HashSet<String>();
 Set<String> set = hashSet;
 // 实现类向上转型为接口
 // 同理 Set<String> set = new HashSet<String>();
 // 添加元素
 set.add("a");
 set.add("b");
 set.add("c");
 set.add("d");
 // 迭代器 iterator() 遍历整个set
// 通过迭代器取出集合中的对象
 Iterator<String> it = set.iterator<String>();
 while(it.hasNext){
  String s = it.next();
  System.out.println(s);
 }
 }
}

Iterator迭代器 iterator()

// 简书作者:达叔小生
Iterator<E> iterator()
// 返回在此collection的元素上的迭代效果。

接口Iterable<E>中的iterator
在此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<K,V>
K - the type of keys maintained by this map
V - the type of mapped values

Map是一种对象,将keys键和values值建立起一种映射关系,一个map不能有重复的keys,每个key只能唯一映射到一个值。

// 简书作者:达叔小生
import java.util.Map;
import java.util.HahMap;
public class Demo{
 public static void main(String args[]){
  HashMap<String,String> hasMap = new  HashMap<String,String>();
  Map<String,String> map = hasMap;
 // 向上转型
 // 同理 Map<Stirng,String> map = new HashMap<String,String>();
 // put() 用来存放键值对
 map.put("1","a");
 map.put("2","b");
 map.put("3","c");
// 获取长度
 int i = map.size();
// 获取键为2的值
 String s = map.get("2");
 }
}

Map中键是不可以重复的,值是可以重复的。如果map中添加一样的键,那么新的值会覆盖老的值。

Collection

// 简书作者:达叔小生
public interface List<E>
extends Collection<E>

// 简书作者:达叔小生
java.util
接口 List<E>
所有超级接口:Collection<E>,Iterable<E>
所有已知实现类:AbstractList,AbstractSequentialList,ArrayList,AttributeList,CopyOnWriteArrayList,LinkedList,RoleList,Vector,Stack。
可以用 ArrayList

public interface List<E> extends Collection<E>

// 简书作者:达叔小生
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<list.size(); i++){
  System.out.println(list.get(i));
 }
}

往后余生,唯独有你
简书作者:达叔小生
90后帅气小伙,良好的开发习惯;独立思考的能力;主动并且善于沟通
简书博客: https://www.jianshu.com/u/c785ece603d1

结语

  • 下面我将继续对 其他知识 深入讲解 ,有兴趣可以继续关注
  • 小礼物走一走 or 点赞

原文地址:https://www.cnblogs.com/dashucoding/p/9689769.html

时间: 2024-11-03 05:34:40

第48节:Java当中的集合框架的相关文章

JAVA基础之集合框架

集合框架(collections framework) 首先要明确,集合代表了一组对象(和数组一样,但数组长度不能变,而集合能).Java中的集合框架定义了一套规范,用来表示.操作集合,使具体操作与实现细节解耦. 其实说白了,可以把一个集合看成一个微型数据库,操作不外乎"增删改查"四种操作,我们在学习使用一个具体的集合类时,需要把这四个操作的时空复杂度弄清楚了,基本上就可以说掌握这个类了. 设计理念 主要理念用一句话概括就是:提供一套"小而美"的API.API需要对

java中的集合框架

由于数组具有属性单一,长度不可改变的缺点,于是在程序中我们使用集合来代替它. 集合中不可放入基本数据类型,基本数据类型都是通过自动拆包和自动装箱功能才能放入和取出集合. 分类:Collection接口和Map接口 Collection:存放单一值元素,又可分为list接口类型和set接口类型 list接口类型:存放元素是有序的可重复的,可通过循环来取出其中的元素,实现类ArrayList() set接口类型:hash值排列,存放元素是无序不可重复的,通过指针取出其中元素,实现类HashSet()

学java教程之集合框架

学编程吧学编程学IT教程之java教程集合框架发布了,欢迎通过xuebiancheng8.com来访问 java中的集合框架故名思议就是针对集合的框架.那什么是集合呢,前面已经学习过数组,没错,数组就是一组数据的集合,换句话说数组也是一种特殊的集合框架,可以完成集合的功能.那数组在使用的时候有没有不方便的地方呢,比方说数组有可能有满的时候,满了怎么办,我们是不是得自己写程序来更改数组的大小呢,而且还要把原来的数组赋值到新的数组的原来位置上,这样很明显数组用起来不是特别方便,很多功能得让我们自己去

菜鸟日记之 java中的集合框架

java中的集合框架图 如图所示:java中的集合分为两种Collection和Map两种接口 可分为Collection是单列集合和Map的双列集合 Collection单列集合:继承了Iterator接口所以具有了iterator()方法 ,该方法返回一个Iterator<T>,这个接口具有 HasNext (),next(),remove()3个方法可以在实现类里完成实现. hasNext():判断是否有下一个元素 cusor是当前的操作下标 next():读取下一个元素 remove(

Java中的集合框架(上)

Java中的集合框架概述 集合的概念: Java中的集合类:是一种工具类,就像是容器,存储任意数量的具有共同属性的对象. 集合的作用: 1.在类的内部,对数据进行组织: 2.简单的快速的搜索大数据量的条目: 3.有的集合接口,提供了一系列排列有序的元素,并且 可以在序列中间快速的插入或删除有关的元素. 4.有的集合接口,提供了映射关系,可以通过 关键字(key)去快速查找到对应的唯一对象,而这个关键字可以是任意类型. 与数组的对比一为何选择集合而不是数组 1.数组的长度固定,集合长度可变 2.数

java常见的集合框架有哪些?

java常见的集合框架有哪些?很多学习java的朋友会问到这个问题,那么学习Java集合框架下大致可以分为如下五个部分:List列表.Set集合.Map映射.迭代器(Iterator.Enumeration).工具类(Arrays.Collections).今天西安java培训小编为大家分享. Java集合类的整体框架如下: 从上图中可以看出,集合类主要分为两大类:Collection和Map. Collection是List.Set等集合高度抽象出来的接口,它包含了这些集合的基本操作,它主要又

Java中的集合框架-Map

前两篇<Java中的集合框架-Commection(一)>和<Java中的集合框架-Commection(二)>把集合框架中的Collection开发常用知识点作了一下记录,从本篇开始,对集合框架里的另外一部分Map作一下记录. 一,集合框架的Map接口 Map与Collection不同之处在于它是以键值对来存储数据: Map比较常用的实现类有四个:HashTable,HashMap,LinkedHashMap,TreeMap: Map的方法也可以分为四类,增删改查,大致如下: 新

黑马程序员——【Java基础】——集合框架

一.集合框架概述 (一)集合框架中集合类关系简化图 (二)为什么出现集合类? 面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的操作,就对对象进行存储,集合就是用于存储对象的. (三)数组和集合类同是容器,有何不同? .数组长度是固定的:集合长度是可变的. 2.数组中可以存储基本数据类型,集合只能存储对象. (四)集合类的特点 集合可以存储不同类型的对象.集合只用于存储对象,集合长度是可变的. (五)为什么会出现这么多容器? 因为每一个容器对数据的存储方式都有不同,这个存储方式称

java简单的集合框架(一)

首先让我们看一下简单的集合框架的继承层次 collection                   list(有序的容器   元素可以重复)                                                        Queue(队列)                                                  set(无序的容器就是元素不可重复) linkedList        ArrayList   Vector