20210416----java---list&map

ArrayList<Integer> arrayList = new ArrayList<Integer>();
for (int i = 0; i < 100000; i++) {
    arrayList.add(i);
}
for (int i = 0; i < 10000; i++) {
    arrayList.get(i);
}
for (int i = 9999; i >=0; i--) {
    arrayList.remove(i);
}

Iterator<String> it = list.iterator();
while (it.hasNext()) {
System.out.println(it.next());
}

2.indexOf(Object obj)方法和lastIndexOf(Object obj)方法的区别
在使用List集合时需要注意区分indexOf(Object obj)方法和lastIndexOf(Object obj)方法,前者是获得指定对象的最小的索引位置,而后者是获得指定对象的最大的索引位置,前提条件是指定的对象在List集合中具有重复的对象,否则如果在List集合中有且仅有一个指定的对象,则通过这两个方法获得的索引位置是相同的

在使用subList(int fromIndex, int toIndex)方法截取现有List集合中的部分对象生成新的List集合时,需要注意的是,新生成的集合中包含起始索引位置代表的对象,但是不包含终止索引位置代表的对象

如果涉及到多线程,那么就选择Vector(当然,你也可以使用ArrayList并自己实现同步)。

如果不涉及到多线程就从LinkedList、ArrayList中选。 LinkedList更适合从中间插入或者删除(链表的特性)。 ArrayList更适合检索和在末尾插入或删除(数组的特性)

遍历方式
----1. 普通fori 方式遍历
for (int i = 0; i < j; i++)
{
list.get(i);
}

----2. iterate()迭代器方式(collection 集合共有方法)
Iterator<Integer> iterator = list.iterator();
while (iterator.hasNext())
{
iterator.next();
}

for (Iterator<Integer> iterator = list.iterator();
{
iterator.next();
}

----3.增强for
for (int item : list)
{
// System.out.println(item);
}

----4.forEach() 注意java8 才支持
list.forEach(item ->
{ // System.out.println(item); });

----5. stream().forEach() 注意java8 才支持
list.stream().forEach(item -> { // System.out.println(item); });

----6. parallelStream().forEach() 注意java8 才支持
list.parallelStream().forEach(item -> { // System.out.println(item); });

 

Map

Map<Integer,Integer> map=new HashMap<>();

map.put(xx,xx)

map.get(xx)

map.containsKey(xx)

map.size()

map.remove()

map1.putAll(map2);//合并时如果map2的key与map1的key有重复的,则map2的键值覆盖与map1重复的键值

map.clear();

map.values();

Collection values = map.values();

----------1. 这是最常用的方式,在键值都需要的时候map.entrySet() 加增强for------------------

for(Map.Entry<String, String> entry : map.entrySet()){
    String mapKey = entry.getKey();
    String mapValue = entry.getValue();
    System.out.println(mapKey+":"+mapValue);
}
-------2. 在for循环中遍历key或者values,一般适用于只需要map中的key或者value时使用,在性能上比使用entrySet较好;-------------

//key
for(String key : map.keySet()){
    System.out.println(key);
}
//value
for(String value : map.values()){
    System.out.println(value);
}
-------3. 通过键找值遍历,这种方式的效率比较低,因为本身从键取值是耗时的操作--------------
for(String key : map.keySet()){
    String value = map.get(key);
    System.out.println(key+":"+value);
}

----4. 通过迭代器 map.entrySet().iterator()-----
Iterator<Entry<String, String>> entries = map.entrySet().iterator();
while(entries.hasNext()){
    Entry<String, String> entry = entries.next();
    String key = entry.getKey();
    String value = entry.getValue();
    System.out.println(key+":"+value);
}
-------5. JDK8新特性新增的lambda表达式遍历Map的方法——Map.forEach();------------
map.forEach( (key,value) -> {} );
map.forEach((k,v)-> 
{
System.out.println(k+":"+v); });

---map.entrySet().stream().forEach 注意:java8 才支持----
map.entrySet().stream().forEach( (entry) -> {} );
数组、链表、队列、栈,是数据结构中最基础的四大结构,数组和链表更是基础中的基础,后续所有复杂的数据结构都是在它们的基础上演变而来的。
数组
https://article.itxueyuan.com/prE0je
https://segmentfault.com/a/1190000023501433

 

 

 

上一篇:学习Java 8的核心新特性:Lambda(匿名函数)、流


下一篇:浅谈JavaScript常见的循环方式