20210416----java---list&map&stack
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
Stack
empty(), 判断是否为空
peek(), 查看栈顶元素
pop(), 移除栈顶元素
push(), 元素压入栈中
Character Character.toUpperCase(c); Character.toLowerCase(c);
String s.charAt(i); s.toCharArray(); S.equals(T.substring(i,i+len_s))