javaAPI_集合基础_Collection

集合基础1_集合概述以及Collection集合

1.为什么会出现集合?
我们学习的是面向对象语言,而面向对象语言对事物的描述是通过对象体现的,为了方便对多个对象进行操作,我们就必须把这多个对象进行存储。
而要想存储多个对象,就不能是一个基本的变量,而应该是一个容器类型的变量,在我们目前所学过的知识里面,有哪些是容器类型的呢?
数组和StringBuffer。但是呢?StringBuffer的结果是一个字符串,不一定满足我们的要求,所以我们只能选择数组,这就是对象数组。
而对象数组又不能适应变化的需求,因为数组的长度是固定的,这个时候,为了适应变化的需求,Java就提供了集合类供我们使用。

2.数组和集合的区别?
A:长度区别
数组的长度固定
集合长度可变
B:内容不同
数组存储的是同一种类型的元素
而集合可以存储不同类型的元素
C:元素的数据类型问题
数组可以存储基本数据类型,也可以存储引用数据类型
集合只能存储引用类型

3.java集合以及体系

4.Collection类

(1).Collection类的概述
Collection:是集合的顶层接口,它的子体系有重复的,有唯一的,有有序的,有无序的。

(2).Collection类的常用功能

A:添加功能
boolean add(Object obj):添加一个元素
boolean addAll(Collection c):添加一个集合的元素

B:删除功能
void clear():移除所有元素
boolean remove(Object o):移除一个元素(移除指定元素)
boolean removeAll(Collection c):移除一个集合的元素(只要有一个元素被移除了,那么就返回true)

C:判断功能
boolean contains(Object o):判断集合中是否包含指定的元素
boolean containsAll(Collection c):判断集合中是否包含指定的集合元素(必须要包含全部)
boolean isEmpty():判断集合是否为空

D:获取功能
Iterator<E> iterator()(重点):迭代器,集合遍历的特有方式
E next():获取元素,并移动到下一个位置。
boolean hasNext():是否还有下一个元素

E:长度功能
int size():元素的个数
面试题:数组有没有length()方法呢?字符串有没有length()方法呢?集合有没有length()方法呢?

F:交集功能
boolean retainAll(Collection c):两个集合都有的元素,获取俩个集合的交集,谁调用该方法,那么元素就会跑去那一个集合中。
也就是说集合A和集合B做交集,最终结果保存在A中,B集合内容不变,返回值表示的是A集合中
的内容是否发生过改变。

G:把集合转换为数组
Object[] toArray():集合转化为素组,这样可以实现对集合的遍历

(3).基本功能测试
public static void main(String[] args) {
//创建Collection对象,由于Collection是一个接口,所以是不能够实例化的,所以能够使用其子类对象
Collection c = new ArrayList<>();
c.add("hello");
c.add("world");
c.add("java");
//清空集合
//c.clear();

//移除指定元素
//c.remove("hello");

//判断是否包含指定元素
c.contains("hello");

//判断集合是否为空
c.isEmpty();

//获取元素个数
c.size();
}

(4).Collection集合并遍历对象(迭代器)
public static void main(String[] args) {
//创建Collection对象,由于Collection是一个接口,所以是不能够实例化的,所以能够使用其子类对象
Collection c = new ArrayList<>();
c.add("hello");
c.add("world");
c.add("java");

//lterator是一个接口,实际返回的是它的子类对象
//注意,由于next在调用一次之后,就会移动到下一个对象上面去,所以不要多次的调用next()方法
Iterator lt = c.iterator();
while(lt.hasNext()){
String str = (String) lt.next();
System.out.println(str);
}

System.out.println("--------------------------");
//使用for循环同样可以获得相同的效果,同时lt1在循环完毕就是垃圾,可以提高一点效率
for(Iterator lt1 = c.iterator();lt1.hasNext();){
String str = (String) lt1.next();
System.out.println(str);
}
}

(5).迭代器原理
A:迭代器是依赖于集合而存在的。

B:迭代器为什么不定已成为一个类,而是定义成为一个接口?
假设迭代器定义的是一个类,这样,我们就可以创建该类的对象,并调用该类的方法来实现集合的遍历。但是呢?我们应该思考一个这
样的问题。由于java中提供了很多的集合类。而这一些集合类的数据结构是不同的,所以,存储的方式和遍历的方式应该是不一样的。
进而他们的遍历方式也应该是不一样的,最终就没有定义迭代器类。
而无论你是哪一种集合,都应该具备获取元素的操作,并且,最好在辅助有判断功能,这样在获取前,先判断。这样就不会容易出错。
也就是说判断和获取功能是每一个集合遍历的时候锁具备的。而每一种集合的方式又不太一样,所以设计者们就把这几个功能提取出来
并不提供实现,这一种方式就是接口。
那么,真正的具体的实现类是在哪里呢?
在真正的具体的子类中,以内部类的方式体现的。

C:迭代器源码
a:collection集合继承了一个父接口
public interface Collection<E> extends Iterable<E> {....}

b:Iterable接口中只有一个方法
public interface Iterable<T> {
Iterator<T> iterator();
}
c:Iterator接口中有三个抽象方法(注意:抽象方法要求继承子类必须继承并重写)
//接口中中的方法存在默认修饰符:public abstract
public interface Iterator<E> {
boolean hasNext();
E next();
void remove();
}
d:Collection要实现上述三个方法(hasNext(),next(),remove()),但是并没有在Collection中给出具体的实现。
那么为什么呢?具体的实现又是在哪里?
因为Collection是一个接口,不给出具体实现。
我们在创建对象的时候是:Collection c = new ArrayList();那么,我们就往ArrayList里面找,它应该是给出了具体实现。

e:看ArrayList中的iterator()方法
public Iterator<E> iterator() {
return new Itr();
}
f:这一个时候,我们发现返回的是一个: new Itr();这是一个接口,居然能够作为返回值,那么也就是说这里面一定给出了具体的实现

g:Itr()方法
private class Itr implements Iterator<E> {...}//一个内部类,实现了haNext(),next(),remove()方法。

(6).一个Collection的代码练习:
//省略学生对象

public static void main(String[] args) {
Collection c = new ArrayList<>();

Student s = new Student();
s.setName("张三");
s.setAge(12);

Student s1 = new Student();
s1.setName("李四");
s1.setAge(13);

//添加元素
c.add(s);
c.add(s1);

Iterator lt = c.iterator();
while (lt.hasNext()) {
Student getStudent = (Student) lt.next();
System.out.println(getStudent.getName()+"------"+getStudent.getAge());

}

原文地址:https://www.cnblogs.com/nwxayyf/p/10198983.html

时间: 2024-10-09 17:49:10

javaAPI_集合基础_Collection的相关文章

javaAPI_集合基础_List的三个子类基本使用

List的三个子类基本使用 ArrayList 1.ArrayList类概述 ArrayList的底层数据结构是数组,查询快,增删慢.属于线程不安全,但是效率高. 2.ArrayList使用案例[使用ArrayList存储对象并遍历] public static void main(String[] args) { ArrayList lt = new ArrayList(); lt.add("hello"); lt.add("world"); lt.add(&qu

java 集合基础1 学习笔记

集合特点: 1.用于存储对象的容器. 2.集合的长度是可变的. 3.集合中不可以存储基本数据类型值. Collection接口常见方法: 1.添加 boolean add(obj); boolean addAll(Collection coll); 2.删除 boolean remove(obj); boolean removeAll(Collection coll); void clear();//清空集合 3.判断 boolean contains(obj); boolean contain

黑马程序员——Java集合基础知识之Map

Map概念 要同时存储两个元素Key和Value,他们之间有映射关系,每个键不能重复,每个键只能映射到一个值. 当数据之间存在映射关系的时候,考虑使用Map集合. Map常用方法 如果添加的键原来有值,后添加的值会覆盖前面的值,并返回之前的值.put会返回来先添加的值,后添加的值会覆盖原有的值. Map tm =new TreeMap(); tm.put (key, value);//MAP没有add tm.remove (key) ;//去除一个key和对应的value,若不存在key返回nu

黑马程序员——Java集合基础知识之Collection

集合基础知识--Collection Java中集合框架由常用的Collection接口和Map接口组成,而Collection接口又有两个子接口,是List接口和Set接口,常用的集合框架由这三个类组成. List接口的功能方法 List的使用最为简单,创建集合,通过add方法添加元素,get方法获取元素,通过迭代器获取元素.List接口存放的数据无序的,添加速度快,但是查询速度慢,因为查询的时候必须遍历,每次都重头开始,效率较低.常用实现类有ArrayList,LinkedList. Lis

黑马程序员——集合基础知识(泛型)

集合:泛型基础知识 泛型.(泛型就是类型参数化,默认的时object,虽然不用强制类型转换,这个就要你自己去写特性方法,比如compareto是string的特有方法吧,你可以写但是父类肯定调用不了) itnex t对象都是obj要使用对象的特性功能必须强.编译的时候没问题,因为都不知道你会传什么对象,你橙子也可以当作apple来传,设计的时候并不知道! 泛型作用.1.用于解决安全问题.运行时期出现的问题classcastexception转移到编译时期.2.迭代器里面的itnext()不用强转

黑马程序员——集合基础知识(Collection)

集合基础知识 数组:长度固定,可存基本数据和对象. 集合:只能放对象,不固定.容器也有共性,不断抽取成一个体系,集合框架.参阅顶层创建底层.顶层是collection.collection里有两个常见的接口,List和Set.常见集合有Arraylist,linkedlist,vector,hashSet TreeSet.为什么会出现这么多的容器呢,因为每一个容器对数据的存储方式都有不一样,.这个存储方式称之为数据结构!!因为他们的特点不一样 list因为有脚标存储和删除的效率很低,Set的效率

黑马程序员——集合基础知识(Map)

Map概念 要同时存储两个元素,他们之间有映射关系,每个键不能重复,每个键只能映射到一个值. 存储键值对,并且键是唯一的. 1.添加. put()如果添加的键原来有值,后添加的值会覆盖前面的值,并返回之前的值. 2.删除 remove()按键删除. 3.判断 4.获取 get(object key) size() value()拿值value返回的是值的集合... HashTable 底层是哈西数据结构,不可以存入null键null值,线程同步. HashMap 底层是哈西表数据结构,允许使用n

List集合基础增强底层源码分析

List集合基础增强底层源码分析 作者:Stanley 罗昊 集合分为三个系列,分别为:List.set.map List系列 特点:元素有序可重复 有序指的是元素的添加顺序,也就是说,元素被第一个存进去的时候,它就在第一位,这就是list集合的元素添加顺序: 通常情况下我们所说的有序有两个概念,第一个是添加顺序,第二个是大小顺序(实际上就是元素值的大小) List下面重点关注两个实现类分别是: ArrayList LinkedList ArrayList ArrayList底层实现是数组,既然

List集合基础

集合:数据结构(数据的组织方式和存储方式)不同导致了集合的不同不同的集合向上抽取最终获得一个Collection集合单列集合:        collection List接口                           Set接口 ArrayList              LinkedList        HashSet        LinkedHashSet 双列集合:        Map HashMap            LinkedHashMap 集合的clone(