java容器也称为java 集合框架,里面除了存储对象的容器之外,还提供了一套用于处理和操作容器里面的对象的一套工具类。
-
List:列表,是一个接口。它的实现类常用的有LinkedList、ArrayList和Vector。
-
set:集合,与数学中的集合性质相似。
-
map:是一类重要的数据结构。类似于数学中的函数,key对应自变量x、value对应因变量y、散列函数对应f。
注:Collections 类也是一个非常有用的类,位于 java.util 包中,提供的 sort() 方法可以对字符或数字列表进行排序。
1,LinkedList是一种采用双向链表实现的列表,适用于实现顺序访问,删除与增加数据。
首先了解一下linkedlist双向链表的数据结构模型:
每一个结点的内容分为三部分:与前驱结点相连的指针,当前结点值,与后继结点相连的指针。
import java.util.LinkedList; public class test{ public static void main(String[] args){ /*创建linkedList双向链表的方法*/ LinkedList<String/*数据类型*/> list/*名称*/ = new LinkedList<String>(); /*添加元素,正序添加*/ list.add("huang"); list.add("lin"); list.add("chun"); /*正序输出链表元素*/ System.out.println(list); /*添加表首元素*/ list.addFirst("is"); System.out.println(list); /*添加表尾元素*/ list.addLast("ya"); System.out.println(list); /*添加指定节点位置元素,0为表首,依次向后*/ list.add(int index,String); /*删除表首元素*/ list.removeFirst(); System.out.println(list); /*删除表尾元素*/ list.removeLast(); System.out.println(list); /*清空链表*/ list.clear(); /*判断链表中是否含有某元素*/ list.contains(String); /*获取链表首部节点值*/ System.out.println(list.getFirst()); /*获取链表尾部结点值*/ System.out.println(list.getLast()); /*利用size方法迭代链表元素*/ for(int size = list.size(), int i=0; i< size; i++){ System.out.println(list.get(i)); } /*利用for-each方法迭代链表元素*/ for(String i : list){ System.out.println(i); } } }
2,ArrayList是可以动态修改的数组,是一个数组队列,提供了相关的添加、删除、修改、遍历等功能。
import java.util.ArrayList; public class test{ /*创建ArrayList的方法,其中E是泛型数据类型,只能为引用数据类型,例如String类型*/ ArrayList<E> list = new ArrayList<E>(); public static void mian(String[] args){ ArrayList<String> list = new AraayList<String>(); list.add("wo"); list.add("shi"); list,add("huang xian sen"); System.out.println(list); /*获取指定节点位置的值*/ System.out,println(list.get(int index)); /*修改指定位置的节点值*/ list.set(int index,String); /*删除指定位置的节点*/ list.remove(int index); /*获取数组长度*/ System.out.println(list.size()); /*利用size方法迭代数组*/ for(int i = 0;i< list.size(); i++;){ System.out.println(list.get(i)); } /*利用for-each方法迭代数组*/ for(String i : list){ System.out.println(i); } } }
3,HashSet基于 HashMap 来实现的,是一个不允许有重复元素的集合。
import java.util.HashSet; public class test{ public static void main(String[] args){ HashSet<String> set = new HashSet<>(); set.add("12"); set.add("34"); set.add("567"); /*重复添加同一元素报错*/ set.add("12"); System.out.print(set); /*根据元素内容删除指定元素*/ set.remove("34"); /*清空集合*/ set.clear(); /*计算元素个数*/ System.out.println(set.size()); /*利用for-each迭代集合元素*/ for(String i : set){ System.out.println(i); } } }
4,HashMap 是一个散列表,它存储的内容是键值对(key-value)映射。
import java.util.HashMap; public class test{ /*创建HashMap时指定key与hash值对应,他们的数据类型可以相同也可以不同*/ HashMap<E1, E2> map = new HashMap<E1, E2>(); public static void mian(String[] args){ HashMap<Integer, String> map = new HashMap<Integer, String>(); /*增加键值对*/ map.put(1,"java"); map.put(2,"c"); map.put(3,"c++"); Sytem.out.println(map); /*计算键值对的个数*/ int Size = map.size(); System.out.println(map.get(1)); /*根据key值删除指定键值对*/ map.remove(3); /*清空map*/ map.clear(); /*利用for-each迭代map*/ /*如果你只想获取key那就使用keyset方法,然后使用get方法获取哈希值,你也可以直接使用values方法直接按正序获取哈希值*/ for(integer i : map.keySet()){ System.out.println(i+map.get(i)); } } }
注:java容器中的集合框架许多方法都是互通的,互助学习更加高效。
5,java迭代器Iterator就是对for-each迭代的封装版,但是其中多了许多高级的数据操作功能:
import java.util.Iterator; import java.util.ArrayList; public class test{ public static void main(String[] args){ ArrayList<int> list = new ArrayList<>(); list.add(100); list.add(67); list.add(54); /*创建指定容器的迭代器*/ Iterator<int> it = list.Iterator(); /*利用hashNext方法进行迭代*/ /*hashNext主要的动能就是判断当前的选取的数据类型,不为null的选中后将指针指向后继元素,直到遇到null为止结束*/ while(it.hashNext()){ System.out.println(it.next()); } /*跌代过程加入删除操作*/ while(it.hashNext()){ if(it.next<= 60){ it.remove(); } } System.out.println(list); } }
注:关于这个方面的其他知识扩展可以在CSDN与菜鸟等网站查找阅览。
6,实例练习:利用本章节的知识将以下成绩表单对你选取的java容器进行数据操纵的操作:
林一 | 49 |
---|---|
刘二 | 31 |
张三 | 67 |
李四 | 75 |
王五 | 64 |
赵六 | 87 |
/*首先分析:这个表单具有对应关系,所以我们采取HashMap这种java容器,利用for-each对不及格删除*/ import java.util.HashMap; public class test{ public static void main(String[] args){ HashMap<String, int> map = new HashMap<String, int>(); map.put("林一",49); map.put("刘二",31); map.put("张三",67); map.put("李四",75); map.put("王五",64); map.put("赵六",87); System.out.println("及格学生名单如下:"); for(String i : map.keySet()){ if(map.get(i)< 60){ map.remove(i); } Syetem.out.println(i+":"+map.get(i)); } } }