1.List接口
List接口继承与collection接口,实现类为ArrayList和LinkedList
List接口特点
- List集合有下标
- List集合是有序的
- List集合可以存重复的元素
List接口常用方法
public class TestList {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("大力娃");
list.add("千顺娃");
list.add("头铁娃");
list.add("喷火娃");
list.add("喷水娃");
list.add("隐身娃");
list.add("小紫娃");
System.out.println(list.contains("喷火娃"));
System.out.println(list.equals("喷水娃"));
System.out.println(list.isEmpty());
System.out.println(list.remove("小蝴蝶"));
System.out.println(list.size());
System.out.println(Arrays.toString(list.toArray()));
list.add("小蝴蝶");
System.out.println(list);
list.add(1,"蛇精");
list.add(3,"小蝴蝶");
System.out.println(list);
System.out.println(list.indexOf("小蝴蝶"));
System.out.println(list.lastIndexOf("小蝴蝶"));
System.out.println(list.remove(2));
System.out.println(list.get(8));
System.out.println(list);
System.out.println(list.set(5,"蝎子精"));
System.out.println(list);
List<String> list2 = new ArrayList<>();
list2.add("1");
list2.add("2");
list2.add("3");
list2.add("4");
System.out.println(list2);
System.out.println(list.addAll(list2));
System.out.println(list);
System.out.println(list.addAll(1,list2));
}
}
List接口的四种迭代方式
public class TestList2 {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("喜羊羊");
list.add("美羊羊");
list.add("懒羊羊");
list.add("沸羊羊");
list.add("小肥羊");
list.add("肥羊卷");
System.out.println(list);
System.out.println("方式一 ::*************************************");
for(int i=0; i<list.size(); i++){
System.out.println(list.get(i));
}
System.out.println("方式二 ::**************************************");
for(String s : list){
System.out.println(s);
}
System.out.println("方式三 ::*************************************** ");
Iterator<String> it = list.iterator();
while(it.hasNext()){
System.out.println(it.next());
}
System.out.println("方式四 ::*************************************** ");
ListIterator<String> it2 = list.listIterator();
while(it2.hasNext()){
System.out.println(it2.nextIndex());
}
System.out.println("方式五,逆序迭代 ::*************************************** ");
ListIterator<String> it3 = list.listIterator();
while(it3.hasNext()){
System.out.println(it3.next());
if(!it3.hasNext()){
System.out.println("开始逆序遍历");
while(it3.hasPrevious()){
System.out.println(it3.previous());
}
break;
}
}
}
}
2.List集合的两个常用实现类
2.1 ArrayList
- List接口的实现类
- 底层的数据结构是数组,内存空间是连续的
- 元素有下标,有序,允许存放重复的操作
- 通常可以根据下标进行操作
- 增删操作比较慢,查询操作比较快【数据量大时】
- 内部数组默认的初始容量是10,如果不够会以1.5倍的容量增长
public class TestArrayList {
public static void main(String[] args) {
ArrayList<Integer> list = new ArrayList<>();
list.add(100);
list.add(200);
list.add(300);
list.add(400);
list.add(400);
list.add(300);
System.out.println(list);
System.out.println(list.contains("100"));
System.out.println(list.get(1));
System.out.println(list.indexOf(400));
System.out.println(list.lastIndexOf(400));
System.out.println(list.remove(0));
System.out.println(list.remove(Integer.valueOf(300)));
System.out.println(list);
System.out.println(list.contains(200));
}
}
2.2 LinkedList实现类
- List接口的实现类
- 底层的数据结构是链表,内存空间是不连续的
- 元素有下标,有序,允许存放重复的数据
- 但是通常首尾节点的操作比较多
- 增删操作比较快,查询操作比较慢【数据量大时】
- LinkedList查询,首尾操作还是比较快的
public class TestLinkedList {
public static void main(String[] args) {
LinkedList<String> list = new LinkedList<>();
list.add("孙悟空");
list.add("猪八戒");
list.add("沙师弟");
list.add("唐三藏");
list.add("白龙马");
System.out.println(list);
list.addFirst("蜘蛛精");
list.addLast("玉兔精");
System.out.println(list);
System.out.println(list.getFirst());
System.out.println(list.getLast());
System.out.println(list.removeFirst());
System.out.println(list.removeLast());
System.out.println(list);
LinkedList<String> list2 = new LinkedList<>();
list2.add("西游记");
list2.add("红楼梦");
list2.add("水许传");
list2.add("三国演义");
System.out.println(list2);
System.out.println(list2.element());
System.out.println(list2.peek());
System.out.println(list2.peekFirst());
System.out.println(list2.peekLast());
System.out.println(list2.offer("斗罗大陆"));
System.out.println(list2.offerFirst("盗墓笔记"));
System.out.println(list2.offerLast("钢铁是怎样练成的"));
System.out.println(list2);
System.out.println(list2.poll());
System.out.println(list2.pollFirst());
System.out.println(list2.pollLast());
System.out.println(list2);
}
}
3.Map接口
- map集合的结构是:键值对、KEY与VALUE、Map.Entry<K,V>的映射关系
- map中key值不允许重复,如果重复,对应的value会被覆盖
- map中的映射关系是无序的
- map没有自己的迭代器,所以迭代时通常需要转成set集合来迭代
public class TestMap {
public static void main(String[] args) {
Map<Integer,String> map = new HashMap<>();
map.put(9527,"白骨精");
map.put(9528,"黑熊精");
map.put(9529,"鲤鱼精");
map.put(9530,"黄毛怪");
map.put(9531,"黑熊精");
map.put(9527,"女儿国国王");
System.out.println(map);
System.out.println(map.hashCode());
System.out.println(map.equals("黄毛怪"));
System.out.println(map.isEmpty());
System.out.println(map.size());
System.out.println(map.containsKey(9527));
System.out.println(map.containsValue("黑熊精"));
System.out.println(map);
System.out.println(map.get(9527));
System.out.println(map.remove(9529));
System.out.println(map.containsValue("鲤鱼精"));
System.out.println(map.containsKey(9529));
Collection<String> values = map.values();
System.out.println(values);
Set<Integer> key = map.keySet();
System.out.println(key);
Iterator<Integer> it = key.iterator();
while(it.hasNext()){
Integer next = it.next();
String value = map.get(next);
System.out.println("{"+next+"="+value+"}");
}
System.out.println("第二种方法*************************");
Set<Map.Entry<Integer, String>> set = map.entrySet();
Iterator<Map.Entry<Integer, String>> it2 = set.iterator();
while(it2.hasNext()){
Map.Entry<Integer, String> entry = it2.next();
Integer key1 = entry.getKey();
String val = entry.getValue();
System.out.println("{"+key1+"="+val+"}");
}
}
}
|