List
public class emp {
private String id;
private String name;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public emp(String id,String name){
this.id= id;
this.name=name;
}
}
public class testlist {
public static void main(String[] args) {
ArrayList al = new ArrayList();
emp e1 = new emp("1","宋江");
emp e2 = new emp("2","卢俊义");
emp e3 = new emp("3","吴用");
al.add(e1);
al.add(e2);
al.add(e3);
System.out.println("al的大小是" + al.size());
// emp temp=(emp)al.get(0);
// System.out.println(temp.getId()+temp.getName());
for(int a=0;a<al.size();a++){
emp temp=(emp)al.get(a);
System.out.println("添加后的结果"+temp.getId() + temp.getName());
}
for(int a=0;a<al.size();a++){
emp temp=(emp)al.get(a);
al.remove(1);
System.out.println("删除后的结果"+temp.getId() + temp.getName());
}
}
}
控制台的输出语句:
al的大小是3
添加后的结果1宋江
添加后的结果2卢俊义
添加后的结果3吴用
删除后的结果1宋江
删除后的结果3吴用
Map
//创建员工类
class Emp{
//定义成员变量工号、姓名、薪水
private String empNo;
private String name;
private float sal;
//创建构造函数,初始化成员变量
public Emp(String empNo,String name,float sal){
this.empNo=empNo;
this.name=name;
this.sal=sal;
}
//使用set、get方法进行数据传递
public String getEmpNo() {
return empNo;
}
public void setEmpNo(String empNo) {
this.empNo = empNo;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public float getSal() {
return sal;
}
public void setSal(float sal) {
this.sal = sal;
}
}
public class Demo143 {
public static void main(String[] args) {
//创建HashMap对象
HashMap hm=new HashMap();
Emp emp1=new Emp("s001","aa",3.4f);
Emp emp2=new Emp("s002","bb",5.6f);
Emp emp3=new Emp("s003","cc",1.2f);
//将emp放入到hm中
//hm.put(null,null);//可以放空值
hm.put("s001", emp1);
hm.put("s002", emp2);
hm.put("s002", emp3);//不允许key重复,所以emp3会覆盖emp2
//如果你要查找编号是s002
if(hm.containsKey("s002")){//取键值containsKey
System.out.println("有该员工");
//如何取出,键<key>值
Emp emp=(Emp)hm.get("s002");
System.out.println("名字"+emp.getName());
}else{
System.out.println("没该员工");
}
//遍历HashMap中所有的key和value值
//Iterator迭代
Iterator it=hm.keySet().iterator();
//hasNext返回一个boolean值
while(it.hasNext()){
//如果有下一个取出key值
String key=it.next().toString();
//通过key取出value
Emp emp=(Emp)hm.get(key);
System.out.println("名字:"+emp.getName());
System.out.println("工资:"+emp.getSal());
}
}
}
}
Set和List的区别
-
1. Set 接口实例存储的是无序的,不重复的数据。List 接口实例存储的是有序的,可以重复的元素。
-
2. Set检索效率低下,删除和插入效率高,插入和删除不会引起元素位置改变 <实现类有HashSet,TreeSet>。
-
3. List和数组类似,可以动态增长,根据实际存储的数据的长度自动增长List的长度。查找元素效率高,插入删除效率低,因为会引起其他元素位置改变 <实现类有ArrayList,LinkedList,Vector> 。
package com.jdbc.connection; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; public class 集合 { public static void main(String[] args) { List<String> list = new ArrayList<String>(); list.add("刘备"); list.add("赤兔"); //for循环遍历list for(int i=0;i<list.size();i++){ System.out.println(list.get(i));//获取list.add的值 System.out.println(i);//获取list的个数 } //迭代器遍历list Iterator<String> it= list.iterator(); while(it.hasNext()){ System.out.println("Iterator迭代的结果是:"+it.next()); } Map<String,String> map= new HashMap<String,String>(); map.put("1", "孙悟空"); map.put("2", "猪八戒"); map.put("3", "唐僧"); map.put("4", "沙和尚"); Iterator<Map.Entry<String, String>> it1 = map.entrySet().iterator(); while(it1.hasNext()){ Map.Entry<String,String> ent=it1.next(); System.out.println("Key值是"+ent.getKey()+"Value是"+ent.getValue()); } } }
迭代器
Interface Iterator<E>
boolean hasNext()
Returns true if the iteration has more elements.
E next()
Returns the next element in the iteration.
void remove()
Removes from the underlying collection the last element returned by the iterator (optional operation).
注意:
从以上的定义中可以发现,似乎Iterable()接口和Iterator()接口完全一致,没有任何区别。结合刚刚学习的内部类,可以发现这又是一个支持程序多样化的巧妙设计,充分的支持了多态和解耦。
1、由于所有的Collection类型的对象都被强制要求implements Iterable 接口,故任何Collection对象都要能返回一个能遍历其的迭代器Iterator。如果直接 implement iterator接口, Collection会直接要求具有hasNext()等方法。但是这种方法不具备多态性,即设定好了该如何执行hasNext()等操作,而且程序会显得十分的臃肿和复杂。但是如果采用实施Iterable()接口和返回Iterator对象的方式,则会全然的不同,只要能够返回Iterator对象,完全可以自己的需要进行遍历方式上的自由定义。(即针对同一个接口,在其实现类中提供多样、不同的方法)。
迭代器接口要求实现其的类必须提供三种方法:
hasNext()
:遍历过程中,判定是否还有下一个元素。(从Collection对象的第一个元素开始)
next()
: 遍历该元素。(即取出下一个元素)
remove(): 移除刚刚遍历过的元素。
从定义可以发现,该三个方法经常是被搭配使用的。
Examle:
Iteraotr it= arrayList.Iterator();
while(it.hasNext())
{
print(it.next());
it.remove();
}
基本思路为:在遍历下一个元素前,先判断其是否存在。对于想删除的元素,必须先遍历其,故 remove()方法总是接在 next()方法之后。