类集
传统数组可以保存多个数据,但存在长度问题,不得不使用数据结构,使用数据结构时存在诸多不便,比如数据结构的实现需要考虑多线程处理控制,而类集框架提供的接口则减少了开发中的困难
1.List接口
List<String> list = new List<String>();
list.add("1");
list.add("2");
list.add("2");
list.forEach(
(str)->{
//提取list中的数据
System.out.println(str +" ");
}
);
2.ArrayList 作为List的子类,继承了AbstractList抽象类,又实现了List中的接口
List<String> list = new ArrayList<String>();
int str = 0;
System.out.println("数据是否为空:" + list.isEmpty()+",集合元素个数:"+list.size());
list.add("1");
list.add("2");
list.add("3");
System.out.println("集合中是否包括:" + list.contains("3"));
list.add("4");
System.out.println("数据是否为空:"+list.isEmpty()+",集合元素个数:"+list.size());
//获取索引处数据
System.out.println("该索引"+str+"处数据为"+list.get(str));
3,利用ArrayList接口实现自定义类对象保存
package 类集框架;
import java.util.List;
import java.util.ArrayList;
class Member{
private String name;
private int age;
public Member (String name ,int age) {
this.name= name;
this.age =age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public boolean equals(Object obj) {
if(this == obj) {
return true;
}
if(obj == null) {
return false;
}
if(!(obj instanceof Member)) {
return false;
}
Member mem =(Member) obj;
return this.name.equals(mem.name) && this.age == mem.age;
}
@Override
public String toString() {
return "姓名:"+this.name+ ",年龄:" + this.age;
}
}
public class frameWork2 {
public static void main(String[] args) {
// TODO Auto-generated method stub
List<Member> all = new ArrayList<Member>();
all.add(new Member("王明",90));
all.add(new Member("张明",10));
all.add(new Member("谢明",20));
all.forEach(System.out::println);
System.out.println("该数据是否包括:"+all.equals(new Member("王明",90)));
all.remove(new Member("王明",90));
System.out.println("再次确认该数据是否包括:"+all.equals(new Member("王明",90)));
//输出现在集合内的数据
all.forEach(System.out::println);
}
}
4.LinkedList子类
与ArrayList 不同的 LinkedList实现了List接口外,也实现了Deque接口
package 类集框架;
import java.util.LinkedList;
import java.util.List;
public class frameWork6 {
public static void main(String[] args) {
// TODO Auto-generated method stub
List<Object> link = new LinkedList<Object>();
link.add("ma1");
link.add(1);
System.out.println(link);
}
}
5.Vector类
非常熟悉的类,除了保持了原来的功能外,同时实现了List接口
List<String> list = new Vector<String>();
Set接口
set接口并没有对connection接口进行扩充,为了与List接口区别,set接口中不允许重复数据的加入
try{
Set<String> all = Set.of("java", "java", "java");
}catch(Exception e) {
e.printStackTrace();
MsgBox.showInfo("set接口中不能存在重复数据");
}
1.HashSet
Set接口的子类,与Set最大的不同是不会因为加入重复数据而导致编译报错
Set<String> set = new HashSet<String>();
set.add("java");
set.add("java");
set.add("python");
set.add("Simple");
set.forEach(System.out::println);
2.通过HashSet我们可以得知通过HashSet接口保存的数据存在无序性于是加入LinkedHashSet
System.out.println("/LinkedHashSet子类");
Set<String> set2 = new LinkedHashSet<String>();
set2.add("java");
set2.add("java");
set2.add("baidu");
set2.add("tencent");
set2.forEach(System.out::println);
3.TreeSet 按照字母大小排序
System.out.println("/TreeSet子类实现");
Set<String> set3 = new TreeSet<String>();
set3.add("java");
set3.add("java");
set3.add("c");
set3.add("python");
set3.add("c#");
set3.forEach(System.out::println);
使用TreeSet保存自定义对象(实现了Comparable接口)
package 类集框架;
import java.util.Set;
import java.util.TreeSet;
class MemberTest implements Comparable <MemberTest>{
private String name;
private int age;
public MemberTest(String name ,int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String toString() {
return "姓名;"+this.name + ",年龄:"+this.age;
}
@Override
public int compareTo(MemberTest mem) {
if(this.age < mem.age){
return 1;
}else if(this.age>mem.age) {
return -1;
}else {
return this.name.compareTo(mem.name);
}
}
}
public class frameWork5 {
public static void main(String [] args) {
Set<MemberTest> list = new TreeSet<MemberTest>();
list.add(new MemberTest("小明",90));
list.add(new MemberTest("小王",80));
list.add(new MemberTest("小红",70));
list.add(new MemberTest("小红",70));
list.forEach(System.out::println);
}
}
重复元素删除(需要覆写equals() hashCode())
package 类集框架;
import java.util.HashSet;
import java.util.Set;
class MemberPath {
private String name;
private int age;
public MemberPath(String name , int age) {
this.name= name;
this.age = age;
}
@Override
public String toString() {
return "姓名:"+this.name + ",年龄:"+this.age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public boolean equals(Object obj) {
if(this==obj) {
return true;
}
if(obj == null) {
return false;
}
if(this.getClass() != obj.getClass()) {
return false;
}
MemberPath mem = (MemberPath) obj;
if(this.age != mem.age) {
return false;
}
if(this.name == null) {
if(mem.name != null) {
return false;
}
}else if(!name.equals(mem.name)) {
return false;
}
return true;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + age;
result = prime * result + ((name == null)? 0 : name.hashCode());
return result;
}
}
public class frameWork4 {
public static void main(String[] args) {
Set<MemberPath> list = new HashSet<MemberPath>();
list.add(new MemberPath("张三",90));
list.add(new MemberPath("王五",80));
list.add(new MemberPath("张三",90));
list.forEach(System.out::println);
}
}