集合
组:定长的 可以存放相同类型的数据 数据可以是基本类型也可以是引用类型 访问速度比较快 集合:可变长 只能存放引用类型 访问速度比数组会稍慢一些
java.util包里
set 无序(存和取得顺序)不允许重复(相同的只保存一个)可用来去重复
list 有序(存和取),允许重复(经常用于保存从数据库中查询的数据)
map key,value形式 13904001139 object
key 不允许重复 (缓存用户数据)
如果有相同key的,新的会覆盖旧的
package com.neuedu.day09;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.ListIterator;
import java.util.Set;
import java.util.TreeSet;
import org.junit.Test;
import com.neuedu.day04.Student;
public class JiHe {
@Test
public void myTest01() {
Set stus = new HashSet();// set类型
stus.add("张三");// 添加
stus.add(15);
stus.add(134.14f);
System.out.println(stus);
stus.remove(15);// 删除15
System.out.println(stus);
System.out.println(stus.size());// stus的长度
}
@Test
public void myTest02() {
List stus = new ArrayList();// list
stus.add("张三");// 添加
stus.add(15);
stus.add(134.14f);
System.out.println(stus);
stus.remove(0);// 删除第一个数据
// list的remove 传递的是下标值,从0开始
System.out.println(stus);
System.out.println(stus.size());// stus的长度
}
批量 addAll removeAll了解
@Test
public void myTest03() {
Set stus = new HashSet();// set类型
stus.add("张三");// 添加
stus.add(15);
stus.add(134.14f);
Set stus2 = new HashSet();// set类型
stus2.add("新添加");// 添加
stus2.addAll(stus);
System.out.println(stus2);
stus2.removeAll(stus2);// 删除
System.out.println(stus2);
}
@Test
public void myTest04() {
List stus = new ArrayList();// set类型
stus.add("张三");// 添加
stus.add(15);
stus.add(134.14f);
List stus2 = new ArrayList();// set类型
stus2.add("新添加");// 添加
stus2.addAll(stus);
System.out.println(stus2);
stus2.removeAll(stus2);// 删除15
System.out.println(stus2);
}
@Test
public void myTest05() {
Set stus = new HashSet();// set类型
stus.add("张三");// 添加
stus.add(15);
stus.add(134.14f);
// 1.加强for(foreach)
// for(循环到每个数据的类型 别名:循环对象)
for (Object stu : stus) {
System.out.println(stu);
}
}
iterator
@Test
public void myTest06() {
Set stus = new HashSet();
Student sh = new Student();
sh.setStuName("shenhao");
sh.setStuNo(12);
sh.setClassno(80);
Student jian = new Student();
jian.setStuName("jian");
jian.setStuNo(13);
jian.setClassno(85);
stus.add(sh);
stus.add(jian);
// 1、加强for(foreach)
// for(循环到的每个数据的类型 别名:循环对象)
for (Object stu : stus) {
Student s = (Student) stu;
System.out.println(s.getStuName());
System.out.println(s.getClassno());
System.out.println("-------------------");
}
}
@Test
public void myTest08() {
Set stus = new HashSet();
stus.add(13);
stus.add(14);
stus.add(15);
// 获取itertor(迭代器)
Iterator i = stus.iterator();
// hasNext判断有没有下一条
while (i.hasNext()) {
// next方法指针下移,取出一条
Object obj = i.next();
System.out.println(obj);
if ((int) obj == 13) {
// 错误写法,引发异常
// stus.remove(13);
// 正确写法
i.remove();
}
}
System.out.println(stus);
}
@Test
public void set01() {
Set stus = new HashSet();
stus.add("zhangsan");
stus.add("lisi");
stus.add("wangwu");
System.out.println(stus);// Hashcode
}
@Test
public void set02() {
// TreeSet按照自然顺序 数字从小到大,字母a-z
Set stus = new TreeSet();
stus.add("zhangsan");
stus.add("lisi");
stus.add("wangwu");
System.out.println(stus);
Set stus2 = new TreeSet();
stus2.add("97");
stus2.add("90");
stus2.add("95");
System.out.println(stus2);
}
使用set集合,生成1-25之间不重复的7个随机整数
@Test
public void set03() {
Set stus = new HashSet();
while (true) {
int s = (int) (1 + Math.random() * (25 - 1 + 1));
stus.add(s);
if (stus.size() == 7) {
break;
}
}
System.out.println(stus);
}
@Test
public void set04() {
// 准备一个容器装生成的七位数
Set s = new HashSet();
while (s.size() < 7) {
int i = (int) (1 + Math.random() * (25 - 1 + 1));
s.add(i);
}
System.out.println(s);
}
// RetainAll 保留
// RemoveAll 删除
// Contain(“张三”) 是否存在
// ArrayList(常用 查询所有返回到页面) 基于数组实现的 查询比较快
// linkedList 基于链表的 他插入修改删除比较快
// 栈(先进后出) 队列(先进先出)
// Vector线程安全的,速度慢
@Test
public void list01() {
// add addAll
Student st = new Student();
st.setStuName("张三");
st.setStuNo(13);
st.setClassno(85);
Student st1 = new Student();
st1.setStuName("李四");
st1.setStuNo(13);
st1.setClassno(85);
List<Student> list = new ArrayList();
list.add(st);
list.add(st1);
// 整体循环迭代
for (Student obj : list) {
System.out.println(obj.getStuName());
}
// 单条读取
Student st_obj = list.get(0);
System.out.println(st_obj.getStuName());
// remove remveAll
st.setStuNo(14);
for (Student obj : list) {
System.out.println(obj.getStuNo());
}
// list.remove(0);
list.remove(st);
for (Student obj : list) {
System.out.println(obj.getStuName());
}
// contains 检测是否存在
boolean flag = list.contains(st);
System.out.println(flag);
// get(新增)
// size
}
// 顺序列表ArrayList中存储的元素是整形数字1-5,通过循环放置数据 // 用(foreach和iterator两种方式)遍历每个元素,将每个元素顺序输出
@Test
public void list02() {
List<Integer> list = new ArrayList();
int i = 0;
while (true) {
i++;
list.add(i);
if (list.size() == 5)
break;
}
//用foreach读一下
for (Object li : list) {
System.out.println(li);
}
//用iterator读一下
Iterator i1 = list.iterator();
while (i1.hasNext()) {
Integer i2 = (Integer) i1.next();
System.out.println(i2);
}
}
ListIterator
@Test
public void list03() {
//第一种玩法 向正向取值,再反向读取
Student zs =new Student();
zs.setStuName("张三");
zs.setStuNo(12);
zs.setClassno(80);
Student ls =new Student();
ls.setStuName("李四");
ls.setStuNo(13);
ls.setClassno(85);
List<Student> list = new ArrayList();
list.add(zs);
list.add(ls);
ListIterator li=list.listIterator(list.size());
//正向不读
System.out.println("-----------");
//反向读
//循环先判断有没有上一条
while(li.hasPrevious())
{
Student s=(Student) li.previous();
System.out.println(s.getStuName());
}
}
//LinkedList
//addFirst addLast getFirst getLast removeFirst removeLast
@Test
public void list04() {
//第一种玩法 向正向取值,再反向读取
Student zs =new Student();
zs.setStuName("张三");
zs.setStuNo(12);
zs.setClassno(80);
Student ls =new Student();
ls.setStuName("李四");
ls.setStuNo(13);
ls.setClassno(85);
LinkedList<Student> list = new LinkedList();
list.add(zs);
list.add(ls);
Student ww=new Student();
ww.setStuName("王五");
ww.setStuNo(14);
ww.setClassno(90);
list.addFirst(ww);//加在第一
Student zl=new Student();
zl.setStuName("赵六");
zl.setStuNo(16);
zl.setClassno(95);
list.addLast(zl);//加在最后
list.removeFirst();//删除第一个
list.removeLast();//删除最后一个
for(Student stu:list)
{
System.out.println(stu.getStuName());
}
Student s=list.getFirst();
System.out.println("第一个人是"+s.getStuName());
}
}