A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Alex shaw 中级黑马   /  2013-3-18 18:02  /  1776 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 肖路宽 于 2013-3-18 20:09 编辑

今天去面试,面试官问了我一个关于list的面试题,list是线程安全的么,为什么
list不是线程安全呢,这个我知道,但是为啥我不清楚,求教

评分

参与人数 1技术分 +1 收起 理由
贾文泽 + 1

查看全部评分

5 个回复

倒序浏览
vector 是线程安全的,List 不是。在源码里相同的实现 vector 方法前加了 synchronized 关键字。就知道这么多。
回复 使用道具 举报
List本身是一个接口

关于JAVA中的List的使用:
List<E>([]内的内容可省略),与数组类似:
实例化:List[<数据类型>] list = new ArrayList[<数据类型>]();
获得集合内元素个数:list.size();

添加元素:
默认添加:list.add(e);
指定下标添加(添加后下标后的元素向后挪一位):list.add(index,e);

删除元素:
返回是否删除:list.remove(e);
直接删除指定下标的元素(只删除找到的第一个相符合的元素):list.remove(index);

替换元素(替换掉指定下标的元素):list.set(index,e);

取出元素:list.get(index);

清空集合:list.clear();

判断集合中是否存在某个元素(存在返回true,不存在返回false):list.contains(e);

对比两个集合中的所有元素:
两个对象一定相等:list.equals(list2);
两个对象不一定相等:list.hashCode() == list2.hashCode();
(两个相等对象的equals方法一定为true, 但两个hashcode相等的对象不一定是相等的对象。)

获得元素下标:
元素存在则返回找到的第一个元素的下标,不存在则返回-1:list.indexOf(e);
元素存在则返回找到的最后一个元素的下标,不存在则返回-1:list.lastIndexOf(e);

判断集合是否为空(空则返回true,非空则返回false):list.isEmpty();

返回Iterator集合对象:list.iterator();

将集合转换为字符串:list.toString();

截取集合(从fromIndex开始在toIndex前结束,[fromIndex,toIndex)):list.subList(fromIndex,toIndex);

将集合转换为数组:
默认类型:list.toArray();
指定类型(objects为指定类型的数组对象,并将转换好的数组赋值给objects数组):list.toArray(objects);

以上为List常用的方法。

评分

参与人数 1技术分 +1 收起 理由
贾文泽 + 1

查看全部评分

回复 使用道具 举报
你可以看下源代码,如果是安全的被加上synchronized 同步锁
Vector因为加了同步锁,而List没有,所以list的效率相对于Vector要高
回复 使用道具 举报
蔡志刚 发表于 2013-3-18 18:08
vector 是线程安全的,List 不是。在源码里相同的实现 vector 方法前加了 synchronized 关键字。就知道这么 ...

扫噶 谢谢
回复 使用道具 举报
谢洋 发表于 2013-3-18 19:12
你可以看下源代码,如果是安全的被加上synchronized 同步锁
Vector因为加了同步锁,而List没有,所以list的 ...

恩 受教了,谢谢
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马