Map<-TreeMap
二、java中List的用法和实例详解
List包括List接口以及List接口的所有实现类。因为List接口实现了Collection接口,所以List接口拥有Collection接口提供的所有常用方法,又因为List是列表类型,所以List接口还提供了一些适合于自身的常用方法,如表1所示。
表1 List接口定义的常用方法及功能
void | add(String item) 向滚动列表的末尾添加指定的项。 | |
void | add(String item, int index) 向滚动列表中索引指示的位置添加指定的项。 | |
void | addActionListener(ActionListener l) 添加指定的操作侦听器以从此列表接收操作事件。 | |
void | addItem(String item) 已过时。 由 add(String) 取代。 | |
void | addItem(String item, int index) 已过时。 由 add(String, int) 取代。 | |
void | addItemListener(ItemListener l) 添加指定的项侦听器以接收此列表的项事件。 | |
void | addNotify() 创建列表的同位体。 | |
boolean | allowsMultipleSelections() 已过时。 从 JDK version 1.1 开始,由 isMultipleMode() 取代。 | |
void | clear() 已过时。 从 JDK version 1.1 开始,由 removeAll() 取代。 | |
int | countItems() 已过时。 从 JDK version 1.1 开始,由 getItemCount() 取代。 | |
void | delItem(int position) 已过时。 由 remove(String) 和 remove(int) 取代。 | |
void | delItems(int start, int end) 已过时。 从 JDK version 1.1 开始,后来不再公开使用。只有作为一种打包私有方法时,才希望保留此方法。 | |
void | deselect(int index) 取消选择指定索引处的项。 | |
AccessibleContext | getAccessibleContext() 获取与此 List 关联的 AccessibleContext 。 | |
ActionListener[] | getActionListeners() 返回已在此列表上注册的所有操作侦听器的数组。 | |
String | getItem(int index) 获取与指定索引关联的项。 | |
int | getItemCount() 获取列表中的项数。 | |
ItemListener[] | getItemListeners() 返回已在此列表上注册的所有项侦听器的数组。 | |
String[] | getItems() 获取列表中的项。 | |
| getListeners(Class<T> listenerType) 返回目前已在此 List 上注册为 FooListener 的所有对象的数组。 | |
Dimension | getMinimumSize() 确定此滚动列表的最小大小。 | |
Dimension | getMinimumSize(int rows) 获取具有指定行数的列表的最少维数。 | |
Dimension | getPreferredSize() 获取此滚动列表的首选大小。 | |
Dimension | getPreferredSize(int rows) 获取具有指定行数的列表的首选维数。 | |
int | getRows() 获取此列表中的可视行数。 | |
int | getSelectedIndex() 获取列表中选中项的索引。 | |
int[] | getSelectedIndexes() 获取列表中选中的索引。 | |
String | getSelectedItem() 获取此滚动列表中选中的项。 | |
String[] | getSelectedItems() 获取此滚动列表中选中的项。 | |
Object[] | getSelectedObjects() 获取对象数组中此滚动列表的选中项。 | |
int | getVisibleIndex() 获取上次由 makeVisible 方法使其可视的项的索引。 | |
boolean | isIndexSelected(int index) 确定是否已选中此滚动列表中的指定项。 | |
boolean | isMultipleMode() 确定此列表是否允许多项选择。 | |
boolean | isSelected(int index) 已过时。 从 JDK version 1.1 开始,由 isIndexSelected(int) 取代。 | |
void | makeVisible(int index) 使指定索引处的项可视。 | |
Dimension | minimumSize() 已过时。 从 JDK version 1.1 开始,由 getMinimumSize() 取代。 | |
Dimension | minimumSize(int rows) 已过时。 从 JDK version 1.1 开始,由 getMinimumSize(int) 取代。 | |
protected String | paramString() 返回表示此滚动列表状态的参数字符串。 | |
Dimension | preferredSize() 已过时。 从 JDK version 1.1 开始,由 getPreferredSize() 取代。 | |
Dimension | preferredSize(int rows) 已过时。 从 JDK version 1.1 开始,由 getPreferredSize(int) 取代。 | |
protected void | processActionEvent(ActionEvent e) 处理发生在此列表上的操作事件,方法是将这些事件指派给所有已注册的 ActionListener 对象。 | |
protected void | processEvent(AWTEvent e) 此滚动列表的进程事件。 | |
protected void | processItemEvent(ItemEvent e) 处理发生在此列表上的项事件,方法是将这些事件指派给所有已注册的 ItemListener 对象。 | |
void | remove(int position) 从此滚动列表中移除指定位置处的项。 | |
void | remove(String item) 从列表中移除项的第一次出现。 | |
void | removeActionListener(ActionListener l) 移除指定的操作侦听器,以便不再从此列表接收操作事件。 | |
void | removeAll() 从此列表中移除所有项。 | |
void | removeItemListener(ItemListener l) 移除指定的项侦听器,以便不再从此列表接收项事件。 | |
void | removeNotify() 移除此列表的同位体。 | |
void | replaceItem(String newValue, int index) 使用新字符串替换滚动列表中指定索引处的项。 | |
void | select(int index) 选择滚动列表中指定索引处的项。 | |
void | setMultipleMode(boolean b) 设置确定此列表是否允许多项选择的标志。 | |
void | setMultipleSelections(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