Step By Step(Java 集合篇) (四)

2014-11-24 03:19:39 · 作者: · 浏览: 4
rt(colours);

145 System.out.println(Arrays.toString(colours.toArray()));

146 Collections.sort(colours, Collections.reverseOrder());

147 System.out.println(Arrays.toString(colours.toArray()));

148

149 int index = Collections.binarySearch(colours, "green");

150 System.out.println("Element found at : " + index);

151 ArrayList arrayList = new ArrayList();

152 arrayList.add(new Integer("3"));

153 arrayList.add(new Integer("1"));

154 arrayList.add(new Integer("8"));

155 arrayList.add(new Integer("3"));

156 arrayList.add(new Integer("5"));

157 System.out.println(Collections.min(arrayList));

158 System.out.println(Collections.max(arrayList));

159 }

160

161 public static void showMinMax() {

162 ArrayList arrayList = new ArrayList();

163 arrayList.add(new Integer("3"));

164 arrayList.add(new Integer("1"));

165 arrayList.add(new Integer("8"));

166 arrayList.add(new Integer("3"));

167 arrayList.add(new Integer("5"));

168 System.out.println(Collections.min(arrayList));

169 System.out.println(Collections.max(arrayList));

170 }

171

172 public static void showSynchronizedList() {

173 ArrayList arrayList = new ArrayList();

174 List list = Collections.synchronizedList(arrayList);

175 //list之后的并发操作将不再需要synchronized关键字来进行同步了。

176 }

3. LinkedList: 该集合是通过双向链表来实现的,对于指定位置元素的遍历其内部做了一个小的优化,如果position大于len/2,由于内部的数据结构是双向链表,因此可以从后向前遍历,以减少遍历过程中节点跳转的次数。ArrayList中的大部分代码示例都适用于LinkedList,以下近给出LinkedList特有的常用示例代码:

1 public static void showNewFeatures(String[] args) {

2 LinkedList lList = new LinkedList();

3 lList.add("1");

4 lList.add("2");

5 lList.add("3");

6 lList.add("4");

7 lList.add("5");

8

9 System.out.println("First element of LinkedList is : " + lList.getFirst());

10 System.out.println("Last element of LinkedList is : " + lList.getLast());

11 System.out.println(lList);

12

13 String str = lList.removeFirst();

14 System.out.println(str + " has been removed");

15 System.out.println(lList);

16 str = lList.removeLast();

17 System.out.println(str + " has been removed");

18 System.out.println(lList);

19

20 lList.addFirst("1");

21 System.out.println(lList);

22 lList.addLast("5");

23 System.out.println(lList);

24 }

4. ArrayList和LinkedList的相同点:

1) 都是接口List的实现类;

2) 都可以通过iterator()方法返回Iterator迭代器对象,并可以通过该对象遍历容器中的元素;

3) 如果多个Iterator实例同时引用同一个集合对象,那么当有一个正在遍历,而另外一个修改(add/remove)了集合对象中的元素,对于第一个迭代器再进行迭代时将会引发ConcurrentModificationException异常的发生。

5. ArrayList和LinkedList的不同点:

1) 对ArrayList和LinkedList而言,在列表末尾增加一个元素所花的开销都是固定的。对ArrayList而言,主要是在内部数组中增加一项,指向所添加的元素,偶尔可能会导致对数组重新进行分配;而对LinkedList而言,这个开销是统一的,分配一个内部Entry对象。

2) 在ArrayList的中间插入或删除一个元素意味着这个列表中剩余的元素都会被移动;而在LinkedList的中间插入或删除一个元素的开销是固定的。

3) LinkedList不支持高效的随机元素访问。

4) ArrayList的空间浪费主要体现在在list列表的结尾预留一定的容量空间,而Li