写在前面的话:读书破万卷,编码如有神
--------------------------------------------------------------------
下文主要对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>