A. java linked list里的元素顺序反过来
定义一个LinkedList<Integer> templist = new LinkedList<>();来存储list里面的值,通过迭代list,将值插入在templist的头上,那么templist就是list的反转了,最后将templist赋值给list就行了!
如下代码:
publicvoidreverse(){
LinkedList<Integer>list=newLinkedList<>();
LinkedList<Integer>templist=newLinkedList<>();
inti=0;
while(i<6){
list.add(i);
i++;
}
Iterator<Integer>it=list.iterator();
intm;
while(it.hasNext()&&i>=0){
m=it.next();
templist.addFirst(m);
i--;
}
list=templist;
System.out.println(list);
}
运行结果为:
5 4 3 2 1 0
从API中可以看到List等Collection的实现并没有同步化,如果在多线程应用程序中出现同时访问,而且出现修改操作的时候都要求外部操作同步化;调用Iterator操作获得的Iterator对象在多线程修改Set的时候也自动失效,并抛出java.util.。这种实现机制是fail-fast,对外部的修改并不能提供任何保证。
Iterator是工作在一个独立的线程中,并且拥有一个 mutex锁,就是说Iterator在工作的时候,是不允许被迭代的对象被改变的。
Iterator被创建的时候,建立了一个内存索引表(单链表),这个索引表指向原来的对象,当原来的对象数量改变的时候,这个索引表的内容没有同步改变,所以当索引指针往下移动的时候,便找不到要迭代的对象,于是产生错误。
List、Set等是动态的,可变对象数量的数据结构,但是Iterator则是单向不可变,只能顺序读取,不能逆序操作的数据结构,当 Iterator指向的原始数据发生变化时,Iterator自己就迷失了方向。
所以如果像下面这么写就会抛出异常java.util.
:
publicvoidreverse(){
LinkedList<Integer>list=newLinkedList<>();
inti=0;
while(i<6){
list.add(i);
i++;
}
Iterator<Integer>it=list.iterator();
intm;
while(it.hasNext()&&i>=0){
m=it.next();
list.add(m);
list.remove(0);
i--;
}
System.out.println(list);
}
B. java中的list顺序是固定的吗是有序的吗求解,谢谢。
顺序放进去是不会乱的,举个例子,一个list,第一个放进去是1,第二个放进去是2:
List<Integer> numList=new ArrayList<>();
numList.add(1);
numList.add(2);
当你取第一个时numList.get(0);(下标从0开始)
打印它出来还是:1
如果想了解更深,建议学学数据结构,它们的存储结构与方式
C. 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常用的方法。
D. java中list反向遍历问题,帮忙看下
在反向遍历方法中,获取的迭代器指向第一个元素,it.hasPrevious() 的返回值是 false,所以while 不会执行,要想反向遍历,需要使 it 指向最后一个元素,如下代码:
//反向遍历
publicstaticvoidFbianLi(ArrayListA){
ListIteratorit=A.listIterator(A.size());
while(it.hasPrevious()){
sop1(it.previous()+",");
}
}
E. java里 list顺序是固定的吗,是有序的吗
list是有序的,是以数组的存储方式进行存储.也就是说数组什么样它就什么样,唯一的区别就版是,它没有固定大小权. 且list的检索效率比较高,不过要频繁的对这个容器里的元素进行更新就不要用它了,用linkedlist比较好.
顺序放进去是不会乱的,举个例子,一个list,第一个放进去是1,第二个放进去是2:
List<Integer> numList=new ArrayList<>();
numList.add(1);
numList.add(2);
当你取第一个时numList.get(0);(下标从0开始)
打印它出来还是:1
List 接口下ArrayList 特点是: 插入数据 有序且可重复 适合查找多增删少。