List, Map, Set的联想-简化书写
来源:互联网 发布:淘宝中老年女装 编辑:程序博客网 时间:2024/05/19 13:17
最近在搞3G的研究, 发现android的java代码中有这样三个类Lists, Maps, Sets. 这让我想到和大家分享
首先以前我们写的泛型类List<Integer> list = new ArrayList<Integer>();
显然右边的泛型和左面一样, 能不能不写. 在7月要发版的jdk1.7中有菱形语法
List<Integer> list = new ArrayList<>(); , 但这在1.7之前的所有jdk中都不支持. 能不能有一种
办法可以在之前的所有jdk中不写右边的泛型, 而且没有警告. 看看Lists这个类吧
public class Lists {
/**
* Creates an empty {@code ArrayList} instance.
*
* <p><b>Note:</b> if you only need an <i>immutable</i> empty List, use
* {@link Collections#emptyList} instead.
*
* @return a newly-created, initially-empty {@code ArrayList}
*/
public static <E> ArrayList<E> newArrayList() {
return new ArrayList<E>();
}
显然当我们调用时, 只要 List<Integer> list = Lists.newArrayList(); 在这个方法内部的泛型已经传入类型, 而且代码比直接new
还要短.
以下贴出代码:
Lists:
import java.util.ArrayList;
import java.util.Collections;
/**
* Provides static methods for creating {@code List} instances easily, and other
* utility methods for working with lists.
*/
public class Lists {
/**
* Creates an empty {@code ArrayList} instance.
*
* <p><b>Note:</b> if you only need an <i>immutable</i> empty List, use
* {@link Collections#emptyList} instead.
*
* @return a newly-created, initially-empty {@code ArrayList}
*/
public static <E> ArrayList<E> newArrayList() {
return new ArrayList<E>();
}
/**
* Creates a resizable {@code ArrayList} instance containing the given
* elements.
*
* <p><b>Note:</b> due to a bug in javac 1.5.0_06, we cannot support the
* following:
*
* <p>{@code List<Base> list = Lists.newArrayList(sub1, sub2);}
*
* <p>where {@code sub1} and {@code sub2} are references to subtypes of
* {@code Base}, not of {@code Base} itself. To get around this, you must
* use:
*
* <p>{@code List<Base> list = Lists.<Base>newArrayList(sub1, sub2);}
*
* @param elements the elements that the list should contain, in order
* @return a newly-created {@code ArrayList} containing those elements
*/
public static <E> ArrayList<E> newArrayList(E... elements) {
int capacity = (elements.length * 110) / 100 + 5;
ArrayList<E> list = new ArrayList<E>(capacity);
Collections.addAll(list, elements);
return list;
}
}
Maps:
import java.util.HashMap;
/**
* Provides static methods for creating mutable {@code Maps} instances easily.
*/
public class Maps {
/**
* Creates a {@code HashMap} instance.
*
* @return a newly-created, initially-empty {@code HashMap}
*/
public static <K, V> HashMap<K, V> newHashMap() {
return new HashMap<K, V>();
}
}
Sets:
/*
* Copyright (C) 2007 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.google.android.collect;
import java.util.Collections;
import java.util.EnumSet;
import java.util.HashSet;
import java.util.SortedSet;
import java.util.TreeSet;
/**
* Provides static methods for creating mutable {@code Set} instances easily and
* other static methods for working with Sets.
*
*/
public class Sets {
/**
* Creates an empty {@code HashSet} instance.
*
* <p><b>Note:</b> if {@code E} is an {@link Enum} type, use {@link
* EnumSet#noneOf} instead.
*
* <p><b>Note:</b> if you only need an <i>immutable</i> empty Set,
* use {@link Collections#emptySet} instead.
*
* @return a newly-created, initially-empty {@code HashSet}
*/
public static <K> HashSet<K> newHashSet() {
return new HashSet<K>();
}
/**
* Creates a {@code HashSet} instance containing the given elements.
*
* <p><b>Note:</b> due to a bug in javac 1.5.0_06, we cannot support the
* following:
*
* <p>{@code Set<Base> set = Sets.newHashSet(sub1, sub2);}
*
* <p>where {@code sub1} and {@code sub2} are references to subtypes of {@code
* Base}, not of {@code Base} itself. To get around this, you must use:
*
* <p>{@code Set<Base> set = Sets.<Base>newHashSet(sub1, sub2);}
*
* @param elements the elements that the set should contain
* @return a newly-created {@code HashSet} containing those elements (minus
* duplicates)
*/
public static <E> HashSet<E> newHashSet(E... elements) {
int capacity = elements.length * 4 / 3 + 1;
HashSet<E> set = new HashSet<E>(capacity);
Collections.addAll(set, elements);
return set;
}
/**
* Creates an empty {@code SortedSet} instance.
*
* @return a newly-created, initially-empty {@code SortedSet}.
*/
public static <E> SortedSet<E> newSortedSet() {
return new TreeSet<E>();
}
/**
* Creates a {@code SortedSet} instance containing the given elements.
*
* @param elements the elements that the set should contain
* @return a newly-created {@code SortedSet} containing those elements (minus
* duplicates)
*/
public static <E> SortedSet<E> newSortedSet(E... elements) {
SortedSet<E> set = new TreeSet<E>();
Collections.addAll(set, elements);
return set;
}
}
- List, Map, Set的联想-简化书写
- List,Map,Set的区别
- List、Map、Set的区别
- List,Map,Set的区别
- List Map Set的区别
- set map list的区别
- list,set,map,的转换
- list、set、map的区别
- list set map的区别
- list,set,map的区别
- List 、Set、Map的区别
- list map set 的区别
- Set,List,Map的区别
- list、set、map的总结
- Set,List,Map的区别
- Set,List,Map的区别
- Set,List,Map的关系
- List、Set、Map的区别
- Facebook背后的软件
- Android开发者必须深入学习的10个应用开源项目
- MEMCACHED的最佳实践和内部机制(译)
- X86指令编码内幕 --- immediate 值
- PHP的Socket编程
- List, Map, Set的联想-简化书写
- Launcher权限
- V$PARAMETER
- 开篇
- Visual Studio Team System 2008 Team Suite 简体中文版
- 3G模块在wince下的自动拨号
- 完美者新春大礼包DVD共五篇
- 编写一个程序来计算这两个序列不断变化的总和,直到达到某个次数。让用户交互地输入这个次数。
- GCC-3.4.6源代码学习笔记(175)