java编程思想-7

来源:互联网 发布:开淘宝服装店进货渠道 编辑:程序博客网 时间:2024/06/05 00:39

Java编程思想 -持有对象

当我们创建有限个对象时,可以使用数组存储,但是当我们存储不去定数量的对象时,就需要新的策略来解决这个问题。持有对象,就是通过Java的容器类来保存对象。

1、基本概念

1:Collection,一个独立元素序列,包含三类:List(按照插入顺序保存元素),Set(不能有重复的元素,不按照插入序列保存元素),Queue(按照排队的方式来确定对象的顺序)。这一类属于线性表。
2:Map,一组成对的“键值”对象,其实用字典来称呼更合适,因为字典上有字(key)以及其对应的解释(value)。
在对容器使用的过程中,建议构造子类的实例对象然后向上转型为接口对象。这样的话,修改所使用的容器会比较方便。如:

List<Apple> list = new ArrayList<>();

2、添加一组元素

在java.util包的Arrays类和Collections类中有比较多的实用方法。添加一组数据的方法有:(注意以下方法的参数)

  • Collections.addAll()
  • Arrays.asList(数组参数); #该方式产生的List的尺寸不可调节,否则它将修改原来的数组。
  • Arrays.asList();//避免因参数只是存在共同父类而无法统一List的类型。
  • Collections.sort(); //对数据排序
  • Collections.shuffle(); //打乱数据顺序

3、容器的打印

打印容器中的数据,可以直接使用System.out.print(Collection/Map)。常用的还是使用迭代器对容器中的数据进行读取。

4、List

主要有两个子类:ArrayList,LinkedList。
ArrayList:线性存储数据,数据按照插入次序进行排列。底层是通过数组实现,当数据量增加时,则创建更大容量的数组来装配元素。随机访问比较快,从中间插入和移除效率比较低。
LinkedList:底层是通过链表实现的,对于插入和删除操作效率较高。可以使用该容器实现Stack(堆栈)和Queue (队列)的功能。

5、迭代器

迭代器(Iterator):便利并且选择序列中的对象。它只能单向移动。它统一了容器的访问方式。

  • 使用iterator()方法让容器返回一个Iterator对象;
  • 使用next()返回下一个元素,内部使用的是return get(index++)的方式;
  • 使用hasNext()判断是否还有元素;
  • 使用remove()删除容器中的元素。(之前必须使用next()方法)
    ListIterator类是只能用于List类中,这是一个可以双向移动迭代器。

6、Stack(堆栈)

堆栈:先进先出的线性表。定义方式如下:

Stack<Apple> stack = new Stack<>();stack.push(new Apple()); //入栈stack.pop(); //出栈

7、Set

Set:存放不可重复的元素。其主要有两个子类HashSet和TreeSet。Set数据集合主要用来数据的查找。

  • HashSet是通过散列表的形式存储数据;
  • TreeSet是通过红黑树的方式存储数据。

8、Map

通过键值的方式存储数据,容器中存储容器可以实现数据的多维存储。Map的keySet()方法返回一个key的集合,可用于对Map的遍历。当然还有可以使用Map.Entry来实现对Map的遍历,这个类似于List中的Iterator。使用方式如下:

for(Map.Entry entry : map.entrySet()){    entry.getKey();    entry,getValue();}

Map内有个entrySet()方法返回一个Set集合(元素为Entry对象)。

9、Queue和PriorityQueue

队列:先进先出的线性表。LinkedList也实现了Queue的队列,因此可以使用LinkedList.
使用peek()返回队头元素(不删除),poll()返回队头元素(删除),offer()方法插入元素到队尾。
PriorityQueue可以确保peek(),poll(),remove()时,获取的都是队列中优先级最高的元素。默认是按照自然顺序排列。

10、Foreach和迭代器

Foreach可以用于数组,也可以用于任何Collection对象。同样可以用于实现了Iterable的接口类容器。在实现Iterable接口的类中要实现三个hasNext(),next()和remove()方法。

11、总结

1:数组将数字与对象联系在一起。
2:Collection保存单一元素,Map保存键值对。
3:大量随机访问使用ArrayList,经常插入和删除则使用LinkedList。
4:各种Queue以及栈的行为,可使用LinkedList提供支持。
5:HashMap设计用来快速访问;TreeMap保持键处于排序状态;LinkedHashMap保持元素插入有序,通过散列提供快速访问。
6:HashSet提供最快的查询速度,而TreeSet保持元素的排序状态,LinkedHashSet以插入顺序保存元素。
7:保持Map和Collection联系的就是Map的entrySet()方法和values()产生Collection。