您的位置:首页 > 编程语言 > Java开发

内功心法 -- java.util.ArrayList<E> (3)

2017-02-07 21:02 507 查看
写在前面的话:读书破万卷,编码如有神
--------------------------------------------------------------------
下文主要对java.util.ArrayList<E>的6个常用查询操作进行介绍,主要内容包括:

1、ArrayList查询操作

参考内容:

1、JDK源码(1.7)

--------------------------------------------------------------------

1. ArrayList常用的6个查询操作

查询操作:

(1) boolean contains(Object o)

功能: 判断列表中是否有包含了元素o

示例代码:

1 public class ArrayListTest {
2     public static void main(String[] args) {
3         ArrayList<Integer> list = new ArrayList<Integer>();
4         list.add(0,44);
5         list.add(1,33);
6         list.add(2,22);
7         list.add(1,66);
8         list.add(4,99);
9         System.out.println("list :" + list);
10         //测试ArrayList的boolean contains(Object o)方法的使用
11         System.out.println("列表中是否包含了元素22 :"+list.contains(22));
12         System.out.println("列表中是否包含了元素34 :"+list.contains(34));
13         System.out.println("列表中是否包含了元素66 :"+list.contains(66));
14     }
15 }
16
17 运行结果:
18 list :[44, 66, 33, 22, 99]
19 列表中是否包含了元素22 :true
20 列表中是否包含了元素34 :false
21 列表中是否包含了元素66 :true


源代码如下:

1 public boolean contains(Object o) {
2         //内部是通过调用indexOf(Object o) 方法来实现的
3         return indexOf(o) >= 0;
4     }


(2) E get(int index)

功能: 返回列表index位置上的元素

示例代码:

1 public class ArrayListTest {
2     public static void main(String[] args) {
3         ArrayList<Integer> list = new ArrayList<Integer>();
4         list.add(0,44);
5         list.add(1,33);
6         list.add(2,22);
7         list.add(1,66);
8         list.add(4,99);
9         System.out.println("list :" + list);
10         //测试ArrayList的E get(int index)方法的使用
11         System.out.println("返回列表中下标索引为1的元素 :"+list.get(1));
12         System.out.println("返回列表中下标索引为4的元素 :"+list.get(4));
13         System.out.println("返回列表中下标索引为9的元素 :"+list.get(9));
14     }
15 }
16
17 运行结果:
18 list :[44, 66, 33, 22, 99]
19 返回列表中下标索引为1的元素 :66
20 返回列表中下标索引为4的元素 :99
21 Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 9, Size: 5
22     at java.util.ArrayList.rangeCheck(Unknown Source)
23     at java.util.ArrayList.get(Unknown Source)
24     at ArrayListTest.main(ArrayListTest.java:16)


源代码如下: 查看源码可以发现java.util.ArrayList<E>根据索引下标来获取元素的速度非常快。

1 public E get(int index) {
2         //检查index是否合法
3         rangeCheck(index);
4         //内部调用elementData(int index)方法
5         return elementData(index);
6     }
7
8 @SuppressWarnings("unchecked")
9     E elementData(int index) {
10         return (E) elementData[index];
11     }


(3) int indexOf(Object o)

功能: 返回元素o在列表中的索引位置

示例代码:

1 public class ArrayListTest {
2     public static void main(String[] args) {
3         ArrayList<Integer> list = new ArrayList<Integer>();
4         list.add(0,44);
5         list.add(1,33);
6         list.add(2,22);
7         list.add(1,66);
8         list.add(4,99);
9         System.out.println("list :" + list);
10         //测试ArrayList的'int indexOf(Object o)'方法的使用
11         System.out.println("返回列表中元素为22的索引下标 :"+list.indexOf(22));
12         System.out.println("返回列表中元素为66的索引下标 :"+list.indexOf(66));
13         System.out.println("返回列表中元素为41的索引下标 :"+list.indexOf(41));
14     }
15 }
16
17 运行结果:
18 list :[44, 66, 33, 22, 99]
19 返回列表中元素为22的索引下标 :3
20 返回列表中元素为66的索引下标 :1
21 返回列表中元素为41的索引下标 :-1


源代码如下:

1     public int indexOf(Object o) {
2         if (o == null) {
3             //元素o为null,循环列表中的元素查找
4             for (int i = 0; i < size; i++)
5                 if (elementData[i]==null)
6                     return i;
7         } else {
8             //元素o不为null,循环列表中的元素查找
9             for (int i = 0; i < size; i++)
10                 if (o.equals(elementData[i]))
11                     return i;
12         }
13         return -1;
14     }


(4) boolean isEmpty()

功能: 判断列表是否为空,如果为空,返回true;如果不为空,返回false.

示例代码:

1 public class ArrayListTest {
2     public static void main(String[] args) {
3         ArrayList<Integer> list = new ArrayList<Integer>();
4         list.add(0,44);
5         list.add(1,33);
6         list.add(2,22);
7         list.add(1,66);
8         list.add(4,99);
9         System.out.println("list :" + list);
10         //测试ArrayList的' boolean isEmpty()'方法的使用
11         System.out.println("ArrayList列表是否为空: " + list.isEmpty());
12     }
13 }
14
15 运行结果:
16 list :[44, 66, 33, 22, 99]
17 ArrayList列表是否为空: false


源代码如下:

1     public boolean isEmpty() {
2         return size == 0;
3     }


(5) int lastIndexOf(Object o)

功能: 查询元素o在列表中的索引位置(倒序查找)

示例代码:

1 public class ArrayListTest {
2     public static void main(String[] args) {
3         ArrayList<Integer> list = new ArrayList<Integer>();
4         list.add(0,44);
5         list.add(1,33);
6         list.add(2,22);
7         list.add(1,66);
8         list.add(4,99);
9         list.add(2,66);
10         list.add(1,44);
11         System.out.println("list :" + list);
12         //测试ArrayList的'int lastIndexOf(Object o)'方法的使用
13         System.out.println("ArrayList列表中元素33最后一次出现的索引位置: " + list.lastIndexOf(33));
14         System.out.println("ArrayList列表中元素66最后一次出现的索引位置: " + list.lastIndexOf(66));
15         System.out.println("ArrayList列表中元素55最后一次出现的索引位置: " + list.lastIndexOf(55));
16     }
17 }
18
19 运行结果:
20 list :[44, 44, 66, 66, 33, 22, 99]
21 ArrayList列表中元素33最后一次出现的索引位置: 4
22 ArrayList列表中元素66最后一次出现的索引位置: 3
23 ArrayList列表中元素55最后一次出现的索引位置: -1


源代码如下:

1 public int lastIndexOf(Object o) {
2         if (o == null) {
3             //元素o为null,利用循环倒序查找null元素
4             for (int i = size-1; i >= 0; i--)
5                 if (elementData[i]==null)
6                     return i;
7         } else {
8             //元素o不为null,利用循环倒序查找o元素
9             for (int i = size-1; i >= 0; i--)
10                 if (o.equals(elementData[i]))
11                     return i;
12         }
13         return -1;
14     }


(6) int size()

功能: 返回列表中元素的个数

示例代码:

1 public class ArrayListTest {
2     public static void main(String[] args) {
3         ArrayList<Integer> list = new ArrayList<Integer>();
4         list.add(0,44);
5         list.add(1,33);
6         list.add(2,22);
7         list.add(1,66);
8         list.add(4,99);
9         list.add(2,66);
10         list.add(1,44);
11         System.out.println("list :" + list);
12         //测试ArrayList的'int size()'方法的使用
13         System.out.println("ArrayList列表的size为: " + list.size());
14     }
15 }
16
17 list :[44, 44, 66, 66, 33, 22, 99]
18 ArrayList列表的size为: 7


源代码如下:

1     public int size() {
2         return size;
3     }


--------------------------------------------------------------------------

java.util.ArrayList系列文章

java.util.ArrayList<E>(1)  java.util.ArrayList<E>(2)  java.util.ArrayList<E>(3)

java.util.ArrayList<E>(4)  java.util.ArrayList<E>(5)  java.util.ArrayList<E>(6)

相关知识

java.util.Collection<E>   java.util.AbstractCollection<E>   java.util.List<E>

java.util.AbstractList<E>   java.util.Iterator<E>   java.util.ListIterator<E>

Java中的标记接口   迭代器模式   Java中的深拷贝和浅拷贝 java.util.Arrays
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: