Java常用的集合类型有
List
、
Set
、
Map
,容器一般也有线程安全与非线程安全之分,
java.util
包下的线程安全类一般都是废弃不用的,应该使用
concurrent
包下面的线程安全类。
1.1.
容器的一般使用
A、
声明容器时要指定泛型的类型,可避免编译器警告和强类型转换。
B、
如果一个方法的返回一个容器,不要返回null
,应该返回空的容器以避免空指针异常。
Collections
工具类定义了一些静态的字段:EMPTY_LIST
、
EMPTY_MAP
、
EMPTY_SET
,分别表示不可变的空的
list
、
map
、
set,可使用这些静态字段,而不是自己实例化一个。
C、
声明容器类型时尽量使用接口:List
、
Map
、
Set
,而不是具体的实现类。
这样可以方便更改具体的实现类,特别是方法的参数类型和返回类型,如果使用具体的实现类,则几乎是不可能进行更改的,因为每个调用的地方都需要进行修改。如果使用接口,则只需在方法内部或方法调用的地方更改就行了,把改动的范围最小化。所谓接口隔离原则也就是这个意思。
D、
如果容器接受初始容量,都应该指定一个尽可能准确的初始容量,特别是容器是以数组作为底层存储结构的。
1.2.
Collections工具类
Collections工具类提供了很多使用的方法。可完成的功能有:查找、拷贝、排序、查找最大最小元素、反转列表、轮换列表元素、将容器封装为线程安全的或不可变的。务必要记住这个类,对容器进行操作时,现在
API
里查找此类是否已经有满足要求的方法。
1.3.
集合的交、差、并集
Collection接口定义了
retainAll
、
removeAll
、
addAll
方法用于生成两个集合的交、差、并集。
1.4.
数组与列表的互转换
数组到列表的转换可以使用:Arrays.asList
方法。
列表到数组的转换可以直接调用:toArray
方法。
public class InterfaceSep {
public static void main(String[] args) {
List<String> source = Arrays.asList("123", "456", "789", "abc");
List<String> list = new LinkedList<String>(Arrays.asList("789", "xyz"));
list.retainAll(source);
System.out.println("retainAll :" + list); // 交集
list.addAll(source); // 并集
System.out.println("" + list);
list.add("rest");
list.removeAll(source); // 差集
System.out.println(list);
ArrayList<String> arrayList = new ArrayList<String>(source);
LinkedList<String> linkedList = new LinkedList<String>(source);
concrete(arrayList);
// concrete(linkedList); // compile error
abstrac(arrayList);
abstrac(linkedList);
}
public static void concrete(ArrayList<String> list) {
for (String string : list) {
System.out.println(string);
}
}
public static void abstrac(List<String> list) {
for (String string : list) {
System.out.println(string);
}
}
}
1.5.
Map
JDK里
Map
是一种
key
、
value
的映射结构,提供根据
key
快速查找
value
的能力,一般以
Map.Entry
的结构存储。常用的
Map
实现有
HashMap
、
LinkedHashMap
。
HashMap的底层存储结构是用数组(槽)
+
链表的形式,存储时根据
key
的值映射到数组的某个位置(槽位),如果有多个
key
映射到相同的槽位,则这些元素以链表的形式存放。
LinkedHashMap是采用双向链表,具有可预知的迭代顺序,一般就是插入顺序。
使用:
A、
在需要特定的迭代顺序,使用LinkedHashMap
;否则使用
HashMap
;
B、
迭代Map
时,如果通过
keySet
时,会有一个根据
key
查找
value
的开销。应该使用
entrySet
。
C、
使用Map
时,应该显式指定
key
、
value
的类型,避免强类型转换。
D、
使用HashMap
,因为它底层使用了数组,如果可能,应该尽量给数组预分配合适的大小。
Map<String, Integer> map = new HashMap<String, Integer>(8);
for (Entry<String, Integer> entry : map.entrySet()) {
System.out.println(entry.getKey() + "->" + entry.getValue());
}
for (String key : map.keySet()) {
Integer value = map.get(key);
System.out.println(key + "->" + value);
}
对于容器这种标准的类库,要熟悉其API
,避免自己蹩脚地实现已有的功能。
分享到:
相关推荐
"idiom翻译软件"是一款专为用户提供了高效翻译服务的应用程序。它被设计用来帮助用户理解和传达不同语言之间的意义,确保跨文化交流的准确性和流畅性。这款软件在经过实际测试后,被认为是非常实用且功能完备的。 ...
useEnglish 资源E nglish Phrasal Verb & Idiom
四字成语mysql数据30810条
资源来自pypi官网。 资源全名:china_idiom-0.0.2-py3-none-any.whl
iom` (`id`, `guid`, `idiom`, `full_pinyin`, `pinyin`, `az`, `description`, `source`, `idiom_traditional`, `spinyin`, `idiom_phonetic`, `idiom_correct_pronunciation`, `idiom_distinguish`, `idiom_...
C++中的容器是STL(Standard Template Library,标准模板库)的核心组成部分,它们提供了各种数据结构和算法,帮助开发者有效地存储和管理数据。以下是对标题和描述中提到的C++容器使用经验的详细总结: 1. **慎重...
对于序列容器,可以使用erase-remove idiom,而对于关联容器,直接使用erase成员函数。删除满足特定条件的对象时,可以结合remove_if和swap,或者编写循环来处理。 总之,选择和使用C++容器需要根据具体需求和性能...
### Idiom WorldServer Desktop Workbench 8.1.0.208 使用指南:关键知识点解析 #### 一、概述与快速入门 **Idiom WorldServer Desktop Workbench**是一款专为语言服务提供商(LSPs)和企业翻译部门设计的翻译记忆...
成语Idiom 是 AngularJS 的新翻译系统,它允许您在当前范围内阅读以提供基于上下文的翻译 - 没有更多的东西,他/她,您实际上知道您在写什么。 #用法向您的项目添加一个文件夹,其中包含每种语言的一个 json 文件...
【标题】"猜成语小程序数据库表ims_yf_chengyu_idiom"涉及到的是一个与成语相关的微信小程序的数据存储结构。这个数据库表很可能是用来管理小程序内部的成语信息,包括成语的ID、成语内容、含义、出处等关键数据,以...
"Idiom-看图猜成语程序"是一款基于Python语言开发的应用,旨在提供一种娱乐与学习相结合的方式,让用户通过观察图片来猜测对应的成语。这个程序可能是为教育或休闲目的设计的,利用Python的图像处理和人机交互功能,...
**Pimpl Idiom(指针实现技巧)** 在C++编程中,`Pimpl Idiom`,也称为`Pointer to Implementation`或`Impl Pointer`,是一种设计模式,它用于实现类接口与其实现的分离,以提高代码的编译时间和模块化。这种技术的...
This is a common I/O programming idiom. while((bytes_read = from.read(buffer)) != -1) // Read until EOF to.write(buffer, 0, bytes_read); // write } // Always close the streams, even if exceptions...
AI-Algorithm-Idiom-in-Prolog-Lisp-Java 《Prolog、Lisp 和 Java 中的 AI、Alogirhtm、数据结构和习语》一书的代码
java 8 lambda Concise syntax – More succinct and clear than anonymous inner classes • Deficiencies with anonymous inner classes – Bulky, confusion re “this” and naming in general, no nonfinal var...
//The standard idiom for using the wait methods synchronized (obj) { while (condition does not hold) obj.wait(); //(Releases lock, and reacquires on wakeup) // Perform action appropriate to ...
自然语言处理相关的分词数据
Idiom idiom = new Idiom(); idiom.setId(cursor.getInt(0)); idiom.setIddiom(cursor.getString(1)); idiom.setExplanation(cursor.getString(2)); // 将成语添加到ListView的适配器中 } while (cursor....
4. **Idiom\weapp-idiom\pages\guess\guess.js**:这是微信小程序(WeChat Mini Program)中的一个页面脚本,用于实现“猜成语”页面的逻辑,包括处理用户输入、显示成语图片、验证答案等功能。 5. **Idiom\weapp-...