1、集合
集合最主要的作用就是存储和读取数据的。
collection单列:list(可重复)-------Arraylist+link,set(不可重复)------hashset+treeset
map双列-------hashmap(没有排序),treemap(对键进行排序)
collection集合:
是单例集合的顶层接口,它表示一组对象,这些对象也成为collection的元素。
jdk不提供此接口的任何直接实现,它提供更具体的子接口实现,eg:set list
创建collection的对象:堕胎的形式;具体实现类arraylist。
Collection<String> c = new ArrayList<String>(); c.add("hello"); c.add("world"); System.out.println(c);//[hello, world]
add(E e):添加元素。
remove:从集合中移除指定元素。
clear:清空集合中的元素。
contains:判断集合中是否存在指定元素。
isEmpty:判断集合是否为空。
size():集合的长度。
1.1collection集合的遍历
iterator:返回次集合的迭代器。集合专用的遍历方式。
x.next():返回迭代的下一个元素。
boolean hasNext():如果迭代具有更多的元素,则返回true。
if(l.hadnext()){ sout(x.next()); }
1.2 list集合
有序集合。也成为序列。用户可以精确控制列表中每个元素的插入位置,用户可以通过整数索引访问元素。并搜索列表的元素。
与set集合不同,列表通常允许重复的元素。
特点:有序,可重复。先进先出。
List<String> list = new ArrayList<String>(); list.add("he"); list.add("jddhfj"); list.add("kk"); // System.out.println(list); Iterator<String> it = list.iterator(); while(it.hasNext()){ String s = it.next(); System.out.println(s); }
list集合的特有方法
add(int index,E element):再此集合中的指定位置插入指定的元素。
remove(int index):删除指定索引的元素。返回被删除的元素。
set(int index,E element):修改指定索引的元素,返回被修改的元素。
get(int index):返回指定索引处的元素。
List<Student> list = new ArrayList<Student>(); Student s1 = new Student("z",1); Student s2 = new Student("a",2); Student s3 = new Student("b",3); list.add(s1); list.add(s2); list.add(s3); Iterator<Student> it = list.iterator(); while(it.hasNext()){ Student s = it.next(); System.out.println(s.getAge()+","+s.getName()); } //1,z 2,a 3,b
并发修改异常
concurrenrmodificationexception
用迭代器的时候,因为里面有了一个add操作,所以实际修改次数不等于预期修改次数,所以爆出并发修改异常,将迭代器变成.get()方法就可以了。
Iterator<Student> it = list.iterator(); while(it.hasNext()){ Student s = it.next(); if(s.equals("world")){//里面有world,所以会进入这个if函数中。所以两个次数不一样。 list.add("jdfhdsjhfjksd") } }
ListIterator
是list特有的列表迭代器。
需要导包。
允许程序院沿着任意方法遍历列表。再迭代期间可以获取当前迭代器的位置。
常用方法:
E next():返回迭代中的下一个元素
boolean hasNext():如果迭代具有更多元素,则返回true。
E previous():返回列表中的上一个元素。
boolean hasPrevious():如果此列表迭代器再相反方向遍历列表时具有更多元素,则返回true。
void add(E e):将指定元素插入列表。
List<String> c = new ArrayList<String>();c.add("hello"); c.add("world"); ListIterator<String> it = c.listIterator(); while(it.hasNext()){ String s = it.next(); System.out.println(s); } System.out.println("---------"); //逆向遍历 while(it.hasPrevious()){ String s = it.previous(); System.out.println(s); }
void add(E e):将指定元素插入列表。迭代器的add方法。没有并发修改异常。
列表迭代add方法中,会将实际修改值,赋值给预期修改值。所以两个一样/相等所以不会出现并发修改异常。
List<String> c = new ArrayList<String>(); c.add("hello"); c.add("world"); c.add("java"); ListIterator<String> it = c.listIterator(); while(it.hasNext()){ String s = it.next(); if(s.equals("world")) { it.add("jdfhdsjhfjksd"); } } System.out.println(c);//[hello, world, jdfhdsjhfjksd, java]
增强for循环
增强for循环:简化数组和collection集合的遍历。实现Iterable接口的类允许其对象成为增强for语句的目标。
内部原理是一个Iterator迭代器。
格式:
for(元素数据类型 变量名:数组或者collection集合){ //再此处使用变量即可,该变量就是数组或者集合中的该元素。 } int[] arr={1,2,3,4,5}; for(int i:arr){ sout(i) }
简化了遍历集合或者数组。
list集合存储学生对象用三种方式遍历
List<Student> list = new ArrayList<Student>(); Student s1 = new Student("z",1); Student s2 = new Student("a",2); Student s3 = new Student("b",3); list.add(s1); list.add(s2); list.add(s3); Iterator<Student> it = list.iterator(); //迭代器 while(it.hasNext()){ Student s = it.next(); System.out.println(s.getName()+","+s.getAge()); } System.out.println("-----------"); //for for(int i=0;i< list.size();i++){ Student s =list.get(i); System.out.println(s.getName()+","+s.getAge()); } System.out.println("-----------"); //增强for for(Student s:list){ System.out.println(s.getName()+","+s.getAge()); }
1.3 数据结构-栈+队列+数组+链表
数据结构是计算机存储、组织数据的方式。是指相互之间存在一种或者多种特定关系的数据元素的集合。
栈:先进后出。
进入栈的过程叫做压栈或者进栈。
离开栈的过程叫做弹栈或者出战。
先进去的是栈底元素。后进去的是栈顶元素。
入队列-出队列。
队列:先进先出
数组:
查询效率高,删除效率低。删除原始数据,后面的数据需要往前挪
添加数据时,添加位置的数据的后面都要往后移动。添加效率低。
链表:**
一个节点,有数据+地址。
增加和删除快。
单查询必须从头查询。具体过程再本子上。
1.4 list集合子类的特点
arraylist:数组,查询快,增加删除比较慢。
linkedlist:链表,增删快,查询慢。
ArrayList<String> arr = new ArrayList<String>(); arr.add("hello"); arr.add("my"); arr.add("dear"); Iterator<String> it = arr.iterator(); while(it.hasNext()){ String s = it.next(); System.out.println(s); } LinkedList<String> l = new LinkedList<String>(); l.add("helloh"); l.add("myh"); l.add("dearh"); Iterator<String> it2 = l.iterator(); while(it2.hasNext()){ String s2 = it2.next(); System.out.println(s2); }
1.5Linkedlist集合的特有功能
addFirst(E e):再该列表开头插入指定元素
addLast(E e):在该列表末尾插入指定元素。
getFirst():返回此列表的第一个元素。
getLast():返回此列表的组后一个元素。
removeFist():从此列表中删除并返回第一个元素。
removeLast():从此列表中删除并返回最后一个元素。