2017/12/28-1集合和多线程

Posted Keeloong

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2017/12/28-1集合和多线程相关的知识,希望对你有一定的参考价值。

1、---|Collection: 单列集合
---|List: 有存储顺序, 可重复
---|ArrayList: 数组实现, 查找快, 增删慢
由于是数组实现, 在增和删的时候会牵扯到数组
增容, 以及拷贝元素. 所以慢。数组是可以直接
按索引查找, 所以查找时较快
---|LinkedList: 链表实现, 增删快, 查找慢
由于链表实现, 增加时只要让前一个元素记住自
己就可以, 删除时让前一个元素记住后一个元
素, 后一个元素记住前一个元素. 这样的增删效
率较高但查询时需要一个一个的遍历, 所以效率较低

---|Vector: 和ArrayList原理相同, 但线程安全, 效率略低
和ArrayList实现方式相同, 但考虑了线程安全问
题, 所以效率略低
---| Set接口 无序,不可以重复的集合
---|HashSet 线程不安全,存取速度快。底层是以hash表实现的。

---|TreeSet 红-黑树的数据结构,默认对元素进行自然排序(String)。
如果在比较的时候两个对象返回值为0,那么元素重复。
2、 ---| Map 接口 将键映射到值的对象。一个映射不能包含重复的键;每个键最多只能映射到一个值。

---| HashMap 采用哈希表实现,所以无序

---| TreeMap 可以对健进行排序

---|Hashtable:底层是哈希表数据结构,线程是同步的,不可以存入null键,null值。效率较低,被HashMap 替代。

---|HashMap:底层是哈希表数据结构,线程是不同步的,可以存入null键,null值。要保证键的唯一性,需要覆盖hashCode方法,
和equals方法。

---|LinkedHashMap:该子类基于哈希表又融入了链表。可以Map集合进行增删提高效率。

---|TreeMap:底层是二叉树数据结构。可以对map集合中的键进行排序。需要使用Comparable或者Comparator 进行比较排序。
return 0,来判断键的唯一性。

3、如果调用remove之前没有调用next是不合法的,会抛出IllegalStateException;

4、注意同时重写equals方法和hashcode方法,要想使用toString方法直接显示集合,要注意重写;

5、----| Comparable
compareTo(Object o) 元素自身具备比较性
----| Comparator
compare( Object o1, Object o2 ) 给容器传入比较器

TreeSet集合排序的两种方式:一,让元素自身具备比较性。也就是元素需要实现Comparable接口,覆盖compareTo 方法。这种方式也作为元素的自然排序
,也可称为默认排序。
二,让容器自身具备比较性,自定义比较器。需求:当元素自身不具备比较性,或者元素自身具备的比较性不是所需的。
那么这时只能让容器自身具备。
定义一个类实现Comparator 接口,覆盖compare方法。并将该接口的子类对象作为参数传递给TreeSet集合的构造函数。
当Comparable比较方式,及Comparator比较方式同时存在,以Comparator比较方式为主。
6、遍历Map的方式:
将map 集合中所有的键取出存入set集合。
Set<K> keySet() 返回所有的key对象的Set集合
再通过get方法获取键对应的值。
values() ,获取所有的值.
Collection<V> values()不能获取到key对象

Map.Entry对象 推荐使用 重点 Set<Map.Entry<k,v>> entrySet()将map 集合中的键值映射关系打包成一个对象Map.
Entry对象通过Map.Entry 对象的getKey,getValue获取其键和值。
7、一个任务一个进程,一个进程可以有多个线程;
8、同步是一种机制,防止访问同一个资源时,造成死锁或结果不正确;可以创建同步方法,也可以用同步代码块;
9、多线程的实现方式:一、继承Thread类,重写run(),使用时调用start();
二、实现Runable接口,重写run();使用时把他的实现类的引用传给Thread的构造方法作为参数;

 

以上是关于2017/12/28-1集合和多线程的主要内容,如果未能解决你的问题,请参考以下文章

5天玩转C#并行和多线程编程

多线程和多进程分别是啥意思?

实体框架和多线程

Python学习记录-多进程和多线程

程序进程线程 的概念 和多线程的内存JVM

什么是线程、什么又是多线程 它们之间有什么区别呢?