集合

112 阅读5分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第27天,点击查看活动详情 1.Collection 接口存储一组不唯一,无序的对象

2.list 接口存储一组不唯一,有序(插入顺序)的对象

3.Set接口存储一组唯一,无序的对象

4.Map接口存储一组键值对像,提供key到value的映射

5.ArrayList实现了长度可变的数组。在内存中分配连续的空间,遍历元素和随机访问元素的效率比较高

6.LinkedList采用链表存储方式。插入、删除元素是效率比较高

例题:

package arrayList; 
/**狗狗类 
* 狗狗类 
* * @author y *
*/ public class Dog {
private String name; 
private String strain;
/** * 带参构造方法 * 
* @param name 
* @param strain
*/ public Dog(String name, String strain) {
this.name = name;
this.strain = strain; 
} /**
* 无参构造方法 
*/ public Dog() { 
} public String getName() { return name;
} public void setName(String name) {
this.name = name;
} public String getStrain() { return strain;
} public void setStrain(String strain) {
this.strain = strain;
} @Override public String toString() {
return getName() + "\t" + getStrain();
} } 
/**测试类 package arrayList;
import java.util.LinkedList;
public class TestLinkedList { 
public static void main(String[] args) {
Dog dogOne = new Dog("欧欧", "二哈");
Dog dogTwo = new Dog("亚亚", "拉布拉多"); 
Dog dogThree = new Dog("菲菲", "金毛");
Dog dogFour = new Dog("美美", "泰迪"); 
// 使用LinkedList添加狗狗 LinkedList dogList = new LinkedList(); dogList.addFirst(dogOne); 
dogList.add(1, dogTwo);
dogList.add(dogThree);
dogList.addLast(dogFour);
System.out.println("第一条狗狗的昵称是:" + ((Dog) dogList.getFirst()).getName());
System.out.println("最后一条狗狗的昵称是:" + ((Dog) dogList.getLast()).getName());
// 删除两条狗狗 dogList.removeFirst(); 
dogList.remove(dogThree);
System.out.print("\n删除部分狗狗狗还有" + dogList.size() + "条狗狗。\n分别是:\n");
for (Object ob : dogList) {
if (ob instanceof Dog) { 
System.out.println(ob); } } } }

7.List接口的常用方法

image.png

8.使用List借口提供的remove()、contains()方法移除、判断 元素

9.通过List接口的实现类ArrayList实现

元素个数不确定 
要求获得元素的实际个数 
按照存储顺序获取并打印元素信息 
使用ArrayList存储元素

10.LinkedList的特殊方法

image.png 11.Set接口(Set方法去重)

SetSet接口常用的实现类 
Set中存放对Set接口存储一组唯一,
无序的对象 Hash象的引用

Set方法去重( 字符串或一组数字)

image.png

image.png 12.Map接口常用方法

image.png 13..Map接口常用方法的使用

public static void main(String[] args) {

// 创建Map集合对象

Map countries = new HashMap();

// 添加国家

countries.put("CN", "中华人民共和国");

countries.put("US", "美利坚和众国");

countries.put("JA", "日本");

countries.put("RU", "俄罗斯联邦");

// 获得key是CN国家、

System.out.println("CN对应的国家是:" + countries.get("CN"));

// map里的元素个数

System.out.println("Map中共有" + countries.size() + "组数据");

//移除JA这个键的值

countries.remove("JA");

// map里包含JA的key吗?

System.out.println("Map中包含JA的key吗?" + countries.containsKey("JA"));

// Map里key的集合

System.out.println(countries.keySet());

// Map里value的集合

System.out.println(countries.values());

// Map里的key-value 集合

System.out.println(countries);

// 删除map里所有元素

countries.clear();

System.out.println("已清空map中的数据!");

}

14.如何遍历Map集合

方法1:通过迭代器Iterator实现遍历

获取Iterator :Collection 接口的iterator()方法

Iterator的方法:

boolean hasNext(): 判断是否存在另一个可访问的元素

Object next(): 返回要访问的下一个元素

方法2:

增强for循环:使用Iterator和增强型for循环遍历Map集合

15.foreach迭代遍历语法

for(元素类型t 元素变量x : 数组或集合对象){

引用了x的java 语句

}

image.png

image.png 17.foreach for的简化形式与for的区别仅仅是隐藏了循环条件,不需要使用下标,适合在不关心下标,需要吧数组或集合全部遍历的情况(jdk1.5或以上) foreach 迭代不会数组越界,适合循环输出所有的元素 foreach会默认全部输出数组或列表对象 迭代对象可以是数组或集合 18.如何解决以下强制类型转换时容易出现的异常问题?

List的get(int index)方法获取元素 
Map的get(Object key)方法获取元素 
Iterator的next()方法获取元素

19泛型集合的使用

泛型的好处和应用规范:

将运行时的异常提前至了编译时 
.避免了没必要的强制类型转换 
泛型在集合中常见应用和规范
public static void main(String[] args) {
Dog dogOne = new Dog("欧欧", "二哈");
Dog dogTwo = new Dog("亚亚", "金毛");
Dog dogThree = new Dog("菲菲", "中华田园犬"); 
Dog dogFour = new Dog("美美", "泰迪");
// 创建List泛型集合(<>里面的内容指定数据类型)
List<Dog> list = new ArrayList<Dog>(); 
list.add(dogOne); list.add(dogTwo); 
//方法一:使用foreach遍历dogs对象 for (Dog dog : list) { System.out.println(dog); 
} 
//方法二:使用for循环遍历dogs对象 
for (int i = 0; i < list.size();
i++) { System.out.println(list.get(i)); 
} // Map泛型集合 Map<String, Dog> map = new HashMap<String, Dog>(16);
map.put(dogOne.getName(), dogOne); 
map.put(dogTwo.getName(), dogTwo); 
Set keySet = map.keySet(); Iterator it = keySet.iterator();
while (it.hasNext()) { 
String key = (String) it.next();
Dog dog = map.get(key);
System.out.println(key + "\t" + dog.getStrain());
} }

20.list集合的语法:(List结合ArrayList使用)

(1).普通的创建ArrayList对象 :List 对象名 = new ArrayList(); 
(2).结合泛型集合创建ArrayList对象 :List<类名> list = new ArrayList<类名>();

21.Map集合的语法(Map结合HashMap使用)

(1).普通的创建Map对象 :Map 对象名 = new Map(); 
(2).结合泛型集合创建ArrayList对象 :Map<数据类型,类名> map = new HashMap<数据类型,类名>();

例题:

/** 
*企鹅类(NewPenguin) 
* 使用List存储企鹅信息 
* 把多个企鹅的信息添加到集合中 
* 查看企鹅的数量及所有企鹅的信息 
* 删除集合中部分企鹅的元素 
* 判断集合中是否包含指定企鹅 
* @author y * 
*/ public class NewPenguin {
private String name; private String sex;
public NewPenguin() { }
public NewPenguin(String name,String sex) {
this.name = name; this.sex = sex;
} public void setName(String name) {
this.name = name;
} public String getName() {
return name; 
} public void setSex(String sex) {
this.sex = sex;
} public String getSex() {
return sex; } public String toString() { 
return getName() + "\t" + getSex() + "\n" ;
} } /**
*测试类(NewPenguin) * 
*/ public static void main(String[] args) { 
NewPenguin penOne = new NewPenguin("欧欧","Q仔"); 
NewPenguin penTwo = new NewPenguin("亚亚","Q妹"); 
NewPenguin penThree = new NewPenguin("美美","Q妹"); 
NewPenguin penFour = new NewPenguin("菲菲","Q妹"); 
//方法一:利用List泛型集合 System.out.println("这是List泛型集合"); List<NewPenguin> list = new ArrayList<NewPenguin>();
list.add(penOne); list.add(penTwo); 
list.add(penThree); list.add(penFour); 
//方法一:foreach遍历NewPenguin对象 for(Object pen : list) { System.out.print(pen);
} System.out.println(" ");
//方法二:for循环遍历NewPenguin对象 for(int i =0;i<list.size();i++) { System.out.print(list.get(i)); 
} System.out.println(" "); 
//方法二:利用Map泛型集合 System.out.println("这是Map泛型集合");
Map<String ,NewPenguin> map = new HashMap<String,NewPenguin>(); map.put(penOne.getName(), penOne);
map.put(penTwo.getName(), penTwo);
map.put(penThree.getName(), penThree); 
map.put(penFour.getName(), penFour); 
//使用Iterator遍历 Set keyMap = map.keySet();
Iterator it = keyMap.iterator();
while(it.hasNext()) { 
String key = (String) it.next();
NewPenguin pen = map.get(key); 
System.out.println(key + "\t" + pen.getSex());
} }