一、数组
1.特点:
(1)长度不能改变
(2)无法确定其中的内容
(3)数据类型单一
二、集合
1.线集合:
(1)基于数组
(2)基于数字
2.键值对集合 key=value 类似于数据库中的表,只有两列的表。
3.实际应用
(1)实体类
public class Student{
private String no;//101
private String name;//张三
getter、setter...
}
no作为key 101作为value键值对
线型集合存放多个学生
4.重点
(1)List集合熟练使用
(2)Map集合熟练使用
(3)List集合中如何存放Map集合
三种集合的内存模型
集合的层级结构
放几个题演示下集合的几种基本操作
package com.neu.list;
/**
* List添加元素
*/
import java.util.ArrayList;
import java.util.List;
public class ArrayListDemo_01 {
public static void main(String[] args) {
List list = new ArrayList();
list.add("肖佳凯");
list.add(123);
list.add(0,"王昊洋");
list.add(3,"刘旭东");
list.add("于殿浩");
System.out.println(list);
}
}
package com.neu.list;
/**
* List遍历
*/
import java.util.ArrayList;
import java.util.List;
public class ArrayListDemo_02 {
public static void main(String[] args) {
//<> 泛型,指明集合中存放的数据类型,只能引用类型
List<Integer> num = new ArrayList<>();
num.add(123);
num.add(456);
int a = num.get(1);
//遍历
for (int i = 0; i <num.size() ; i++) {
System.out.println(num.get(i));
}
//加强的for循环,前提是使用泛型
for(Integer n:num){
System.out.println(n);
}
num.remove(0);
for (int n:num){
System.out.println(n);
}
}
}
package com.neu.list;
import java.util.ArrayList;
import java.util.List;
/**
* 向集合中添加1-100之间的十个不重复的随机数
*/
public class ArrayListDemo_03 {
public static void main(String[] args) {
List<Integer> list = new ArrayList<>();
for (int i=0;;i++){
int n = (int) (Math.random()*100+1);
if (!list.contains(n)){
list.add(n);
}else {
continue;
}
if (list.size() == 10){
break;
}
}
System.out.println(list);
}
}
package com.neu.list;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
public class LinkedListDemo_01 {
public static void main(String[] args) {
LinkedList<String> list = new LinkedList<>();
list.add("java");
list.add("C#");
list.addFirst("Mysql");//在链表的第一个节点添加元素,覆盖了java
System.out.println(list);
List names = new ArrayList();
names.add(list); //把链表作为一个元素加进去
System.out.println(names);
names.addAll(list); //把链表的每一个元素加进去
System.out.println(names);
}
}
package com.neu.list;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class ListDemo_01 {
public static void main(String[] args) {
List<Integer> list = new ArrayList<>();
for (int i = 0; i <10 ; i++) {
list.add(i);
}
System.out.println(list);
List<Integer> ls = list.subList(3,7);//截取第3 4 5 6 个元素
System.out.println(ls);
ls.add(0,100);
// 实际上在List里面也添加了100,100在第一个 说明sublist截取的是地址,对他进行操作相应的原来的List也会变
System.out.println(ls);
System.out.println(list);
int[] t = {1,2,3,4,5,6,7,8,9,0};
int[] tt = Arrays.copyOfRange(t,3,6);
tt[0] = 100;
System.out.println(Arrays.toString(tt));
System.out.println(Arrays.toString(t));
}
}
package com.neu.list;
/**
* 集合的各种遍历
*/
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class ListDemo_02 {
public static void main(String[] args) {
List<Integer> list = new ArrayList<>();
list.add(23);
list.add(45);
List<Integer> list1 = new ArrayList<>();
list1.add(56);
list1.add(78);
List list2 = new ArrayList<>();
list2.add(list);
list2.add(list1);
System.out.println(list2);
List list3 = new ArrayList();
list3.addAll(list);
list3.addAll(list1);
System.out.println(list3);
List list4 = list3.subList(1,3);
System.out.println(list4);
list4.add(123);
System.out.println(list3);
//普通遍历
for (int i = 0; i <list3.size() ; i++) {
System.out.println(list3.get(i));
}
//加强for循环 for in(for each)在使用泛型的情况下
for (Object obj:list3) {
System.out.println(obj);
}
//迭代器:集合遍历的工具
Iterator<Integer> it = list.iterator();
while (it.hasNext()) {
Integer i = it.next();
System.out.println(i);
}
}
}
package com.neu.map;
/**
* map添加元素
*/
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class MapDemo_01 {
public static void main(String[] args) {
List<Map<String ,String>> list = new ArrayList<>();
Map<String ,String> map = new HashMap<>();
map.put("no","123");
map.put("name","王昊洋");
map.put("sex","男");
list.add(map);
}
}
package com.neu.map;
/**
* List、Map嵌套使用
* 相当于实体类
* 但是比实体类灵活,易于维护
* 以后做项目的时候建议使用这种方
* 个人感觉比实体类好得多
*/
import java.util.*;
public class MapDemo_02 {
public static List<Map<String,Object>> books = new ArrayList<>();
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
while (true){
System.out.println("图书馆理");
System.out.println("1.添加图书");
System.out.println("2.查询图书");
System.out.println("3.退出程序");
int n = in.nextInt();
switch (n){
case 1:
addBook();
break;
case 2:
queryBook();
break;
case 3:
System.exit(0);
}
}
}
private static void queryBook() {
for (int i = 0; i < books.size(); i++) {
Map<String,Object> b = books.get(i);
Object no = b.get("no");
Object name = b.get("name");
Object price = b.get("price");
System.out.println(no+" "+name+" "+price);
}
}
private static void addBook() {
Scanner in = new Scanner(System.in);
System.out.println("请输入图书信息");
Map<String,Object> ts = new HashMap<>();
System.out.println("输入编号");
String no = in.next();
ts.put("no",no);
System.out.println("请输入书名");
String name = in.next();
ts.put("name",name);
System.out.println("请输入价格");
double price = in.nextDouble();
ts.put("price", price);
//把存放图书信息的map,添加到list集合中
books.add(ts);
}
}
package com.neu.map;
/*
*map几种遍历方法
*/
import java.util.*;
public class MapDemo_06 {
public static void main(String[] args) {
Map map = new HashMap();
for (int i = 0; i < 20; i++) {
map.put(i,i);
}
Set set = map.entrySet();
//使用迭代器遍历
Iterator it =set.iterator();
while (it.hasNext()){
Map.Entry entry = (Map.Entry) it.next();
System.out.println(entry.getKey()+":"+entry.getValue());
}
Set key = map.keySet();
//new一个Object数组,输出数组
Object[] keys = key.toArray();
System.out.println(Arrays.toString(keys));
Collection values = map.values();
System.out.println(values);
Map<String,String > stus = new HashMap<>();
stus.put("no","1001");
stus.put("name","张三");
stus.put("sex","男");
//加强for循环遍历
for (Map.Entry<String,String> entry:stus.entrySet()){
System.out.println(entry.getKey()+":"+entry.getValue());
}
//这样也可以就是多一句代码
Set<Map.Entry<String,String>> s = stus.entrySet();
for (Map.Entry<String,String> entry:s){
System.out.println(entry.getKey()+":"+entry.getValue());
}
}
}
package com.neu.map;
import java.util.HashMap;
import java.util.Map;
/**
* //统计一个字符串中每个字符出现的次数
* //aabacbdc
* //a:3 b:2 c:2 d:1
*/
public class MapDemo_04 {
public static void main(String[] args) {
String str = "aabacbdc";
Map<Character,Integer> map = new HashMap<>();
for (int i = 0; i < str.length(); i++) {
char c= str.charAt(i);
//从map集合中找c对应的值
Integer n = map.get(c);
if (n == null){
//该字符在map中没有对应的value说明该key不存在
//该字符第一次出现
n = 0;
}
//加1 表示出现的次数
n++;
//新的次数要覆盖原有次数
map.put(c,n);
}
System.out.println(map);
}
}
package com.neu.setdemo;
/**
* set集遍历
*/
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
public class Demo_01 {
public static void main(String[] args) {
Set set = new HashSet();
set.add(123);
set.add(456);
set.add("abc");
set.add('章');
set.add(456);
System.out.println(set);
//没有使用泛型
Object[] obj = set.toArray();
for (int i = 0; i < obj.length ; i++) {
System.out.println(obj[i]);
}
//使用泛型
Set<String> names = new HashSet<>();
names.add("张三");
names.add("李四");
names.add("王昊洋");
Iterator<String> it = names.iterator();
while(it.hasNext()){
String n = it.next();
System.out.println(n);
}
//加强for循环
for (String str : names) {
System.out.println(str);
}
}
}
package com.neu.setdemo;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
/**
* 有一个一维数组,要求去除数组中重复数据,不使用循环
*/
public class Demo_02 {
public static void main(String[] args) {
String[] names = {"a","b","a","c","b","d","e","e"};
List<String> list = Arrays.asList(names);
Set<String> set = new HashSet<>();
set.addAll(list);
System.out.println(set);
Object[] obj = set.toArray();
String[] strs = new String[set.size()];
strs = set.toArray(strs);
System.out.println(Arrays.toString(obj));
System.out.println(Arrays.toString(strs));
}
}
package com.neu.setdemo;
import java.util.HashSet;
import java.util.Set;
//debug查看内存形式
public class Demo_03 {
public static void main(String[] args) {
Set set = new HashSet();
for (int i = 0; i < 50; i++) {
set.add(i);
}
}
}