集合
组:定长的 可以存放相同类型的数据 数据可以是基本类型也可以是引用类型 访问速度比较快 集合:可变长 只能存放引用类型 访问速度比数组会稍慢一些
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());
}
}
作业
package com.neuedu.day09;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import org.junit.Test;
import com.neuedu.day04.Student;
public class HomeWork {
LinkedList<Student> list = new LinkedList();
1、请使用LinkedList来模拟一个队列(先进先出的特性):[必做题] 1.1 拥有放入对象的方法void put(Object o) 1.2
取出对象的方法Object get() 1.3 判断队列当中是否为空的方法boolean isEmpty();并且,编写测试代码,验证你的队列是否正确。
@Test
public void myTest01() {
Student zs = new Student();
zs.setStuName("张三");
zs.setStuNo(12);
zs.setClassno(80);
put(zs);
Student ls = new Student();
ls.setStuName("李四");
ls.setStuNo(13);
ls.setClassno(85);
put(ls);
Student ww = new Student();
ww.setStuName("王五");
ww.setStuNo(14);
ww.setClassno(90);
put(ww);
Student zl = new Student();
zl.setStuName("赵六");
zl.setStuNo(16);
zl.setClassno(95);
put(zl);
get();
get();
get();
get();
boolean b = isEmpty();
System.out.println(b);
}
public void put(Student st) {
list.addLast(st);
System.out.println(st.getStuName());
}
public Student get() {
Student s = list.getFirst();
list.removeFirst();
System.out.println(s.getStuName());
return s;
}
public boolean isEmpty() {
if (list.size() == 0) {
return true;
} else {
return false;
}
}
2、产生10个1-100的随机数,并放到一个数组中, 把数组中大于等于10的数字放到一个list集合中,并打印到控制台。
@Test
public void myTest02() {
int s[] = new int[10];
for (int i = 0; i < 10; i++) {
int s1 = (int) (1 + Math.random() * (100 - 1 + 1));
s[i] = s1;
}
List<Integer> list = new ArrayList();
for (int i = 0; i < 10; i++) {
if (s[i] >= 10)
list.add(s[i]);
}
System.out.println(list);
}
3、双色球规则:双色球每注投注号码由6个红色球号码 和1个蓝色球号码组成。红色球号码从1—33中选择;
蓝色球号码从1—16中选择;请随机生成一注双色球号码。 (要求同色号码不重复)
package com.neuedu.day09;
public class DoubleColor {
private String color;
private int s;
public DoubleColor() {
super();
}
public DoubleColor(String color, int s) {
super();
this.color = color;
this.s = s;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
public int getS() {
return s;
}
public void setS(int s) {
this.s = s;
}
}
@Test
public void myTest03() {
List<DoubleColor> list = new ArrayList();
while (true) {
int s = (int) (1 + Math.random() * (33 - 1 + 1));
boolean flag = true;
for (DoubleColor li : list) {
if (s == li.getS()) {
flag = false;
break;
}
}
if (flag) {
DoubleColor d = new DoubleColor("红色", s);
list.add(d);
}
flag = true;
if (list.size() == 6)
break;
}
int s = (int) (1 + Math.random() * (16 - 1 + 1));
DoubleColor d = new DoubleColor("蓝色", s);
list.add(d);
for (DoubleColor li : list) {
System.out.print(li.getColor()+" "+li.getS());
}
}
}