当前位置: 首页 > news >正文

集合类(三)

一、数组类与容器类
   数组和其它容器的区别主要有三方面:效率,类型保存基本类型的能力.
1.数组:是一种效率很高的存储和随机访问对象引用序列的方式.数组是一 个简单的线性序列,因此访问速度很快,但也损失了其它一些特性.创建一个数组对象后,大小就固定了,如果空间不够,通常是再创建一个数组,然后把旧数组中的所有引用移到新数组中.数组可可以保存基本类型,容器不行. 
2.容器类不以具体的类型来处理对象,而是将所有的对象都以Object类型来处理,所以我们可以只创建一个容器,任意的Java对象都可以放进去.容器类可以使用包装类(Integer,Double等)以便把基本类型放入其中. List Set Map 都可以自动调整容量,数组不能。
 Collection<--List<--Vector
  Collection<--List<--ArrayList
  Collection<--List<--LinkedList
  Collection<--Set<--HashSet
  Collection<--Set<--HashSet<--LinkedHashSet
  Collection<--Set<--SortedSet<--TreeSet
  Map<-HashMap

  Map<-TreeMap

二、java中List的用法和实例详解

List包括List接口以及List接口的所有实现类。因为List接口实现了Collection接口,所以List接口拥有Collection接口提供的所有常用方法,又因为List是列表类型,所以List接口还提供了一些适合于自身的常用方法,如表1所示。

 

表1 List接口定义的常用方法及功能

voidadd(String item)
          向滚动列表的末尾添加指定的项。
 voidadd(String item, int index)
          向滚动列表中索引指示的位置添加指定的项。
 voidaddActionListener(ActionListener l)
          添加指定的操作侦听器以从此列表接收操作事件。
 voidaddItem(String item)
          已过时。 add(String) 取代。
 voidaddItem(String item, int index)
          已过时。 add(String, int) 取代。
 voidaddItemListener(ItemListener l)
          添加指定的项侦听器以接收此列表的项事件。
 voidaddNotify()
          创建列表的同位体。
 booleanallowsMultipleSelections()
          已过时。 从 JDK version 1.1 开始,由 isMultipleMode() 取代。
 voidclear()
          已过时。 从 JDK version 1.1 开始,由 removeAll() 取代。
 intcountItems()
          已过时。 从 JDK version 1.1 开始,由 getItemCount() 取代。
 voiddelItem(int position)
          已过时。 remove(String)remove(int) 取代。
 voiddelItems(int start, int end)
          已过时。 从 JDK version 1.1 开始,后来不再公开使用。只有作为一种打包私有方法时,才希望保留此方法。
 voiddeselect(int index)
          取消选择指定索引处的项。
 AccessibleContextgetAccessibleContext()
          获取与此 List 关联的 AccessibleContext
 ActionListener[]getActionListeners()
          返回已在此列表上注册的所有操作侦听器的数组。
 StringgetItem(int index)
          获取与指定索引关联的项。
 intgetItemCount()
          获取列表中的项数。
 ItemListener[]getItemListeners()
          返回已在此列表上注册的所有项侦听器的数组。
 String[]getItems()
          获取列表中的项。
<T extends EventListener>
T[]
getListeners(Class<T> listenerType)
          返回目前已在此 List 上注册为 FooListener 的所有对象的数组。
 DimensiongetMinimumSize()
          确定此滚动列表的最小大小。
 DimensiongetMinimumSize(int rows)
          获取具有指定行数的列表的最少维数。
 DimensiongetPreferredSize()
          获取此滚动列表的首选大小。
 DimensiongetPreferredSize(int rows)
          获取具有指定行数的列表的首选维数。
 intgetRows()
          获取此列表中的可视行数。
 intgetSelectedIndex()
          获取列表中选中项的索引。
 int[]getSelectedIndexes()
          获取列表中选中的索引。
 StringgetSelectedItem()
          获取此滚动列表中选中的项。
 String[]getSelectedItems()
          获取此滚动列表中选中的项。
 Object[]getSelectedObjects()
          获取对象数组中此滚动列表的选中项。
 intgetVisibleIndex()
          获取上次由 makeVisible 方法使其可视的项的索引。
 booleanisIndexSelected(int index)
          确定是否已选中此滚动列表中的指定项。
 booleanisMultipleMode()
          确定此列表是否允许多项选择。
 booleanisSelected(int index)
          已过时。 从 JDK version 1.1 开始,由 isIndexSelected(int) 取代。
 voidmakeVisible(int index)
          使指定索引处的项可视。
 DimensionminimumSize()
          已过时。 从 JDK version 1.1 开始,由 getMinimumSize() 取代。
 DimensionminimumSize(int rows)
          已过时。 从 JDK version 1.1 开始,由 getMinimumSize(int) 取代。
protected  StringparamString()
          返回表示此滚动列表状态的参数字符串。
 DimensionpreferredSize()
          已过时。 从 JDK version 1.1 开始,由 getPreferredSize() 取代。
 DimensionpreferredSize(int rows)
          已过时。 从 JDK version 1.1 开始,由 getPreferredSize(int) 取代。
protected  voidprocessActionEvent(ActionEvent e)
          处理发生在此列表上的操作事件,方法是将这些事件指派给所有已注册的 ActionListener 对象。
protected  voidprocessEvent(AWTEvent e)
          此滚动列表的进程事件。
protected  voidprocessItemEvent(ItemEvent e)
          处理发生在此列表上的项事件,方法是将这些事件指派给所有已注册的 ItemListener 对象。
 voidremove(int position)
          从此滚动列表中移除指定位置处的项。
 voidremove(String item)
          从列表中移除项的第一次出现。
 voidremoveActionListener(ActionListener l)
          移除指定的操作侦听器,以便不再从此列表接收操作事件。
 voidremoveAll()
          从此列表中移除所有项。
 voidremoveItemListener(ItemListener l)
          移除指定的项侦听器,以便不再从此列表接收项事件。
 voidremoveNotify()
          移除此列表的同位体。
 voidreplaceItem(String newValue, int index)
          使用新字符串替换滚动列表中指定索引处的项。
 voidselect(int index)
          选择滚动列表中指定索引处的项。
 voidsetMultipleMode(boolean b)
          设置确定此列表是否允许多项选择的标志。
 voidsetMultipleSelections(boolean b)
          已过时。 从 JDK version 1.1 开始,由 setMultipleMode(boolean) 取代。

从表1可以看出,List接口提供的适合于自身的常用方法均与索引有关,这是因为List集合为列表类型,以线性方式存储对象,可以通过对象的索引操作对象。

 

List接口的常用实现类有ArrayList和LinkedList,在使用List集合时,通常情况下声明为List类型,实例化时根据实际情况的需要,实例化为ArrayList或LinkedList,例如:

List<String>l = new ArrayList<String>();// 利用ArrayList类实例化List集合

List<String>l2 = new LinkedList<String>();// 利用LinkedList类实例化List集合

1.add(int index, Objectobj)方法和set(intindex, Object obj)方法的区别

在使用List集合时需要注意区分add(int index, Objectobj)方法和set(intindex, Object obj)方法,前者是向指定索引位置添加对象,而后者是修改指定索引位置的对象,例如执行下面的代码:

src\com\mwq\TestCollection.java关键代码:

publicstatic void main(String[] args) {

Stringa = "A", b = "B", c = "C", d = "D", e ="E";

List<String>list = new LinkedList<String>();

list.add(a);

list.add(e);

list.add(d);

list.set(1,b);// 将索引位置为1的对象e修改为对象b

list.add(2,c);// 将对象c添加到索引位置为2的位置

Iterator<String>it = list.iterator();

while(it.hasNext()) {

System.out.println(it.next());

}

}

在控制台将输出如下信息:

A

B

C

D

因为List集合可以通过索引位置访问对象,所以还可以通过for循环遍历List集合,例如遍历上面代码中的List集合的代码如下:

src\com\mwq\TestCollection.java关键代码:

for(int i = 0; i < list.size(); i++) {

System.out.println(list.get(i));//利用get(intindex)方法获得指定索引位置的对象

}

src\com\mwq\TestCollection.java完整代码如下:

packagecom.mwq;

importjava.util.ArrayList;

importjava.util.LinkedList;

importjava.util.Iterator;

importjava.util.List;

publicclass TestCollection {

publicstatic void main(String[] args) {

System.out.println("开始:");

Stringa = "A", b = "B", c = "C", d = "D", e ="E";

List<String>list = new LinkedList<String>();

list.add(a);

list.add(e);

list.add(d);

list.set(1,b);// 将索引位置为1的对象e修改为对象b

list.add(2,c);// 将对象c添加到索引位置为2的位置

Iterator<String>it = list.iterator();

while(it.hasNext()) {

System.out.println(it.next());

}

//                 for (int i = 0; i <list.size(); i++) {

//                      System.out.println(list.get(i));// 利用get(int index)方法获得指定索引位置的对象

//          }

System.out.println("结束!");

}

}

2.indexOf(Object obj)方法和lastIndexOf(Object obj)方法的区别

在使用List集合时需要注意区分indexOf(Object obj)方法和lastIndexOf(Object obj)方法,前者是获得指定对象的最小的索引位置,而后者是获得指定对象的最大的索引位置,前提条件是指定的对象在List集合中具有重复的对象,否则如果在List集合中有且仅有一个指定的对象,则通过这两个方法获得的索引位置是相同的,例如执行下面的代码:

src\com\mwq\TestCollection.java关键代码:

publicstatic void main(String[] args) {

Stringa = "A", b = "B", c = "C", d = "D",repeat = "Repeat";

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

list.add(a);          // 索引位置为 0

list.add(repeat);      // 索引位置为 1

list.add(b);          // 索引位置为 2

list.add(repeat);      // 索引位置为 3

 

list.add(c);          // 索引位置为 4

list.add(repeat);      // 索引位置为 5

list.add(d);          // 索引位置为 6

System.out.println(list.indexOf(repeat));

System.out.println(list.lastIndexOf(repeat));

System.out.println(list.indexOf(b));

System.out.println(list.lastIndexOf(b));

}

src\com\mwq\TestCollection.java完整代码如下:

packagecom.mwq;

importjava.util.ArrayList;

importjava.util.List;

publicclass TestCollection {

publicstatic void main(String[] args) {

System.out.println("开始:");

Stringa = "A", b = "B", c = "C", d = "D",repeat = "Repeat";

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

list.add(a);// 索引位置为 0

list.add(repeat);// 索引位置为 1

list.add(b);// 索引位置为 2

list.add(repeat);// 索引位置为 3

list.add(c);// 索引位置为 4

list.add(repeat);// 索引位置为 5

list.add(d);// 索引位置为 6

System.out.println(list.indexOf(repeat));

System.out.println(list.lastIndexOf(repeat));

System.out.println(list.indexOf(b));

System.out.println(list.lastIndexOf(b));

System.out.println("结束!");

}

}

在控制台将输出如下信息:

1

5

2

2

3.subList(int fromIndex, int toIndex)方法

在使用subList(intfromIndex, int toIndex)方法截取现有List集合中的部分对象生成新的List集合时,需要注意的是,新生成的集合中包含起始索引位置代表的对象,但是不包含终止索引位置代表的对象,例如执行下面的代码:

src\com\mwq\TestCollection.java关键代码:

publicstatic void main(String[] args) {

Stringa = "A", b = "B", c = "C", d = "D", e ="E";

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

list.add(a);          // 索引位置为 0

list.add(b);          // 索引位置为 1

list.add(c);          // 索引位置为 2

list.add(d);          // 索引位置为 3

list.add(e);          // 索引位置为 4

list= list.subList(1, 3);// 利用从索引位置1 到 3 的对象重新生成一个List集合

for(int i = 0; i < list.size(); i++) {

System.out.println(list.get(i));

}

}

src\com\mwq\TestCollection.java完整代码:

packagecom.mwq;

importjava.util.ArrayList;

importjava.util.List;

publicclass TestCollection {

publicstatic void main(String[] args) {

System.out.println("开始:");

Stringa = "A", b = "B", c = "C", d = "D", e ="E";

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

list.add(a);// 索引位置为 0

list.add(b);// 索引位置为 1

list.add(c);// 索引位置为 2

list.add(d);// 索引位置为 3

list.add(e);// 索引位置为 4

list= list.subList(1, 3);// 利用从索引位置1 到 3 的对象重新生成一个List集合

for(int i = 0; i < list.size(); i++) {

System.out.println(list.get(i));

}

System.out.println("结束!");

}

}

在控制台将输出如下信息:

B

C

相关文章:

  • 集合类(四)
  • Sql server基础
  • SQL多表连接查询
  • SQL server 多表查询与视图的使用
  • 浅谈JS中this
  • eclipse如何导入jar包
  • 你所忽略的HashMap
  • 随想
  • Java中的Base64(源码)
  • Java中Base64(实例)
  • Java数据类型及运算符
  • SQL server基本使用示例一
  • SQL Server基本使用示例三
  • Oracle12c的安装
  • 编程一
  • 【402天】跃迁之路——程序员高效学习方法论探索系列(实验阶段159-2018.03.14)...
  • 【每日笔记】【Go学习笔记】2019-01-10 codis proxy处理流程
  • Apache Spark Streaming 使用实例
  • bootstrap创建登录注册页面
  • Docker 笔记(1):介绍、镜像、容器及其基本操作
  • FineReport中如何实现自动滚屏效果
  • JavaScript函数式编程(一)
  • JavaScript实现分页效果
  • Java精华积累:初学者都应该搞懂的问题
  • JS实现简单的MVC模式开发小游戏
  • MySQL的数据类型
  • Node 版本管理
  • Otto开发初探——微服务依赖管理新利器
  • tab.js分享及浏览器兼容性问题汇总
  • 浮动相关
  • 前端性能优化——回流与重绘
  • 浅谈Golang中select的用法
  • 文本多行溢出显示...之最后一行不到行尾的解决
  • 移动端 h5开发相关内容总结(三)
  • 原生js练习题---第五课
  • 继 XDL 之后,阿里妈妈开源大规模分布式图表征学习框架 Euler ...
  • ​LeetCode解法汇总2304. 网格中的最小路径代价
  • # C++之functional库用法整理
  • #1014 : Trie树
  • #我与Java虚拟机的故事#连载04:一本让自己没面子的书
  • (11)MSP430F5529 定时器B
  • (3)Dubbo启动时qos-server can not bind localhost22222错误解决
  • (4)事件处理——(7)简单事件(Simple events)
  • (rabbitmq的高级特性)消息可靠性
  • (数位dp) 算法竞赛入门到进阶 书本题集
  • (四)Android布局类型(线性布局LinearLayout)
  • (心得)获取一个数二进制序列中所有的偶数位和奇数位, 分别输出二进制序列。
  • (一)Linux+Windows下安装ffmpeg
  • (转)C#开发微信门户及应用(1)--开始使用微信接口
  • ./mysql.server: 没有那个文件或目录_Linux下安装MySQL出现“ls: /var/lib/mysql/*.pid: 没有那个文件或目录”...
  • .mysql secret在哪_MySQL如何使用索引
  • .net 8 发布了,试下微软最近强推的MAUI
  • .NET精简框架的“无法找到资源程序集”异常释疑
  • .Net中间语言BeforeFieldInit
  • /bin/bash^M: bad interpreter: No such file ordirectory