list接口
上一章介绍了collection接口,知道他是一个位于顶端的接口,他有许多子类,今天我们来看两个比较常用的子类,list和set
首先list集合
List接口的常用子类有:
1ArrayList集合
2 LinkedList集合
list集合是带有索引的,因此List集合迭代方式除了使用迭代器之外,还可以使用索引进行迭代。
for (int i = 0; i < list.size(); i++) { String str = list.get(i); System.out.println(str); }
和数组一样,可以用for循环输出
list集合的数据存储结构:
首先数据存储的常用结构有:栈,队列,数组,链表
栈:是一种先入后出的存储结构,就是先进去的元素存入栈底,最后进入的元素进入栈顶
我们常用top指针来判断栈空或者栈满,还有元素的地址位置
1.进栈(PUSH)算法
①若TOP≥n时,则给出溢出信息,作出错处理(进栈前首先检查栈是否已满,满则溢出;不满则作②);
②置TOP=TOP+1(栈指针加1,指向进栈地址);
③S(TOP)=X,结束(X为新进栈的元素);
2.退栈(POP)算法
①若TOP≤0,则给出下溢信息,作出错处理(退栈前先检查是否已为空栈, 空则下溢;不空则作②);
②X=S(TOP),(退栈后的元素赋给X):
③TOP=TOP-1,结束(栈指针减1,指向栈顶)。
队列:
刚才介绍了栈,现在来看看队列的介绍,队列是一种先进先出的线性表,他有队首指针和队尾指针,
front和rear,当这两个指针指向同一个位置时,对空
链表:链表分为单链表,双链表和循环链表
链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。
set接口
前面的几个接口都可以放重复元素,但是set接口不允许放重复元素
HashSet集合存储数据的结构(哈希表)
public static void main(String[] args) { // TODO Auto-generated method stub Set<String> set=new HashSet<String>(); set.add("今天中午吃什么"); set.add("1"); set.add("排骨面"); //因为没有索引值,所以不能用简单的for循环遍历 Iterator<String> it=set.iterator(); while(it.hasNext()){ System.out.println(it.next()); } for(String str:set){ System.out.println(str); } }
哈希表又叫散列表,是通过关键码值来直接访问的数据结构,大大提高了数据查询的速度,它通过把关键码值映射到表中一个位置来访问记录,这个映射函数
又叫散列函数
map接口
前面介绍的几种接口,元素都是孤立存在的,但是map接口,存储的元素是由键和值一起存在的
//自定义类做键的时候,一定要重写hascode和equals方法 public static void key(){ HashMap<person,String> hs=new HashMap<person,String>(); hs.put(new person("aaa",18),"java"); hs.put( new person("bbb",21),"php"); hs.put( new person("aaa",18),"net"); hs.put(new person("ccc",21),"java"); System.out.println(hs); } public static void valuee(){ HashMap<String,person> hs=new HashMap<String,person>(); hs.put("java", new person("aaa",18)); hs.put("php", new person("bbb",21)); hs.put("net", new person("aaa",18)); hs.put("java",new person("ccc",21)); System.out.println(hs); }