博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java集合类
阅读量:5293 次
发布时间:2019-06-14

本文共 2426 字,大约阅读时间需要 8 分钟。

  java中万物皆对象,数据封装成类,类创建对象,容器类似于存放对象的数组。容器较数组而言有以下特点:1、容器长度可变、数组在堆内存中创建后内存固定;2、容器可存放不同类型的对象,而数组元素类型在创建时需表明。两点归根结底即一点,数组内存在创建之初必须分配且不可变化。

  集合作为工具,存放在java.util包中。其顶层特点由接口Collection封装。下面对其基本方法举例说明(由于接口需要继承后重写其方法,故使用实现接口的ArrayList类代替)。    

import java.util.*;public class Demo1 {	public static void out(Object obj){		System.out.println(obj);	}		public static void main(String[] args){				ArrayList al = new ArrayList();		/*添加数据方法add()*/		al.add("Collection1");		al.add("Collection2");		al.add("Collection3");		al.add("Collection4");				/*删除元素*/		al.remove(2);				/*集合长度*/		out("al.size:"+al.size());				/*集合元素*/		out(al);	}}
运行结果:al.size:3[Collection1, Collection2, Collection4]

其中需要注意的是集合中存放的不是集合中存储对象的全部,而是对象的引用,即地址。

  在Collection接口中还有一个较为特殊的方法:iterator()迭代器,返回值为Iterator类型的接口。

  迭代器用于集合中元素的取出操作。java中集合有多种,而每种集合都是需要元素取出操作且大致处理过程保存一致:先判断集合是否还有元素,若有,继续取出。于是,将该功能提升封装,由于是附加功能,封装成接口,由类implements实现。查看java.util.AbstractList源码如下:

public Iterator
iterator() { return new Itr(); }
{    。。。  private class Itr implements Iterator
{     。。。 public boolean hasNext() { return cursor != size(); } public E next() { 。。。 } public void remove() { 。。。 }  。。。}

 java中使用一内部类实现Iterator接口,在内部类中重写了三方法。定义内部类在于该方法存在于AbstractList类内部,且需要操作该类中私有数据。最后java提供iterator方法访问迭代器方法。如下:

Iterator it = al.iterator();while(it.hasNext()){	out(it.next());}

   java集合类库构成了集合类的框架,Collection是基本的接口,List体系和Set体系是其常见的两种子类接口。List集合中元素有序,元素可以重复,因为每个元素对应唯一索引。Set集合中存储的对象无序,元素则不可重复。

  List体系中常见的类有三种:ArrayList、LinkedList、Vector。ArrayList集合中元素存储结构为数组型,易于元素的查询操作,增删操作则随着元素个数的增加而复杂。LinkedList类中元素数据结构是双链表。增删容易查询难。Vector类存储方式也为数组,其渐渐被ArrayList代替,二者所不同在于Vector集合是同步而ArrayList不同步,当多线程对ArrayList对象进行操作时,有可能引发异常。如ArrayList对象和ArrayList列表迭代器同时作出修改操作时,报ConcurrentModificationException异常。

package CollectionDemo;import java.util.*;public class Demo1 {	public static void out(Object obj){		System.out.println(obj);	}		public static void method(){		ArrayList al = new ArrayList();		ListIterator lt = al.listIterator();				al.add("sb1");		lt.add("sb2");				out(al);	}	public static void main(String[] agrs){				method();	}}运行结果:Exception in thread "main" java.util.ConcurrentModificationException...

 

  List体系中拥有唯一的列表迭代器ListIterator,通过List对象ListIterator()可获得对象的列表迭代器,基于List体系中元素索引一一对应的特性,其内封装的方法可以实现对应下标元素的增删改查操作,具体可查API文档。

  

转载于:https://www.cnblogs.com/yidiudiu/p/4972172.html

你可能感兴趣的文章
C# 连接SQLServer数据库自动生成model类代码
查看>>
关于数据库分布式架构的一些想法。
查看>>
大白话讲解 BitSet
查看>>
sql语句中where与having的区别
查看>>
Python数据分析入门案例
查看>>
0x7fffffff的意思
查看>>
Java的值传递和引用传递
查看>>
HTML5的服务器EventSource(server-sent event)发送事件
查看>>
vue-devtools 获取到 vuex store 和 Vue 实例的?
查看>>
Linux 中【./】和【/】和【.】之间有什么区别?
查看>>
Ubuntu sudo 出现 is not in the sudoers file解决方案
查看>>
内存地址对齐
查看>>
看门狗 (监控芯片)
查看>>
#ifndef #define #endif
查看>>
css背景样式
查看>>
JavaScript介绍
查看>>
js中函数与对象的使用
查看>>
正则表达式
查看>>
开源网络漏洞扫描软件
查看>>
yum 命令跳过特定(指定)软件包升级方法
查看>>