《java编程思想》11.持有对象

Java实用类库还提供了一套相当完整的容器类来解决这个问题,其中基本的类型是List、Set、Queue和Map。这些对象类型也称为集合类,但由于Java的类库中使用了Collection这个名字来指代该类库的一个特殊子集。

1.泛型和类型安全的容器

1.泛型:参数化类型(泛型类,泛型接口,泛型方法)
2.使用泛型类,容器可以在编译器检测对象的类型(如果不使用泛型类,那么将错误对象加入容器,将会在运行时报错)
3.泛型类同样支持向上转型(子类对象可以加入父类的容器中)

2.基本概念

Java容器类类库的用途:保存对象。可以分为两个不同概念:
1)Collection:符合规定的独立元素序列(List按照插入顺序保存数据,Set不能有重复元素;Queue先进先出)
2)Map:Key-Value对象,允许使用Key查找Value(ArrayList允许使用数字查找值,某种意义上将数字和对相关联;映射表(关联数组);字典)
向上转型:
List<Apple> list = new ArrayList<>();
List<Apple> list2 = new LinkedList<>();
List是一个接口,ArrayList和LinkedList分别都继承和实现了List接口。上述两条语句将这两个类的对象转型成对应的接口.接口不能被实例化,但是可以创建一个指向实现类对象的引用)
Collection支持foreach语句

3.添加一组元素

Arrays.asList()方法接受一个数组 或是用逗号分隔的元素列表,并将其转换为List对象;
Collections.addAll()方法接受一个Collection对象,数组或者是逗号分隔的列表,并添加到Collection中
举例:

Collection<Integer> collection = new ArrayList<>(Arrays.asList(1,2,3,4,5));
Integer[] moreInts ={6,7,8,9,10};
Collections.addAll(collection , moreInts);
Collections.addAll(collection , 6,7,8,9,10);

(Colltction.addAll只能接受一个Collection对象作为参数;不如Collections.addAll灵活)

4.容器的打印

Arrays.toString()

5.List

List承诺将元素维护在特定序列。(继承Collection接口)。区别于数组,List允许列表在被创建之后进行添加删除以及自我调整长度。(List是一种可修改的序列
List的两种类型:
ArrayList:适用于随机访问。插入和删除元素较慢
LinkedList:适用于插入,删除以及优划的顺序访问。随机访问很慢
常用方法:
1)contains(对象) 确定某个对象是否存在列表中;
2)remove(对象) 移除元素
3)indexOf(对象) 确定对象所在的索引编号

6.迭代器

迭代器(也是一种设计模式)。迭代器是一个对象,工作是遍历并选择序列中的对象,而客户端程序员不需要知道序列底层的结构。(由于创建代价小,通常被称为轻量级对象
Java中的Iterator:
1)使用方法iterator()返回一个Iterator.Iterator将准备好返回序列的第一个元素。
2)next()获取序列中下一个元素
3)hasNext()检查序列中是否还有元素
4)remove()将迭代器新返回的元素删除
使用迭代器完成一个遍历(String)

while(it.hasNext()) {
    String s =it.next();
    System.out.println(s);
   }

6.1ListIterator

是Iterator的子类。Iterator只能向前移动,ListIterator可以双向移动。
listIterator():产生一个指向List开头的迭代器
listIterator(n):创建一个指向索引为n的元素处 的迭代器
hasPrevious()previous().
方法被对象所调用,所以应该

ListIterator<Generic Class> it =new listIterator<>();
it.hasPrevious(); 

7.LinkedList

相比于ArrayList添加了用作栈,队列或者双端队列的方法

8.Stack

后进先出的容器(LIFO)。可通过LinkedList实现:

public class Stack<T>{
	private LinkedList<T> storage = new LinkedList<T>();
	public void push(T v){storage.addFirst(v);}
	public T peek(){return storage.getFirst();}
	public T pop(){return storage.removeFirst();}
	public boolean empty(){return storage.isEmpty();}
	public String toString(){return storage.toString();}
}

9.Set

Set不保存重复的元素。 在Set中会阻止重复元素的操作,Set中做常被使用的是测试归属性:可以很容易地询问某个对象是否在Set中。在Set中最重要的操作是查找。(HashSet的实现对快速查找进行了优化)
Set本质上就是Collection,只是行为不同,其拥有和collection完全一样的接口。Set基于对象的值来确定归属性。
TreeSet的元素存储在红黑树数据结构中;HashSet使用散列函数。

10.Map

11.Queue

12.Collection和Interator

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_39345957/article/details/87977498