集合类(三)

来源:互联网 发布:怎么在淘宝卖二手东西 编辑:程序博客网 时间:2024/06/17 18:10
一、数组类与容器类
   数组和其它容器的区别主要有三方面:效率,类型保存基本类型的能力.
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

0 0
原创粉丝点击