JAVA面向对象(6)
掌握集合框架包含的内容
java中的集合,位于包java.util
Java集合框架分为2大接口:
Collection
List(ArrayList、LinkedList)
Set(HashSet、TreeSet)
Map
HashMap
TreeMap
集合框架的优点?
解决数组的一些不足之处(存储数据类型单一、空间不可变,操作数据比较麻烦、性能低等),
提供了一种标准的体系结构,方便快速高效操作集合数据
掌握ArrayList和LinkedList的使用
添加: add() 该方法重载2次
boolean add(Object e);//保存任意数据类型的元素
void add(int index,Object e) ;//在指定的下标处,添加任意数据类型的元素
删除:remove() 该方法重载2次
boolean remove(Object e);根据元素的值,删除
Object remove(int index);根据下标位置,删除
获取元素:get(int index)
元素个数:size()
判断某个元素是否存在:boolean contains(Object e)
以上方法,是实现了接口List的类(ArrayList和LinkedList)共有的方法
LinkedList特有的方法:
添加:addFirst()、addLast();
删除:removeFirst()、 removeLast();
获取:getFirst()、getLast()
public static void main(String [] args){ //创建四个狗狗对象 Pet ouou=new Pet("欧欧","雪瑞拉"); Pet yaya=new Pet("亚亚","拉布拉多"); Pet meimei=new Pet("美美","雪瑞拉"); Pet feifei=new Pet("菲菲","拉布拉多"); //创建ArrayList集合对象并把4个狗狗对象放入其中 ArrayList p=new ArrayList(); p.add(ouou); p.add(yaya); p.add(meimei); p.add(2, feifei); //把feifei添加到指定位置 //输出集合中的狗狗的数量 System.out.println("共计有"+p.size()+"条狗。"); //通过便利集合来显示个条狗狗的信息 System.out.println("分别是:"); for(int i=0;i<p.size();i++){ Pet e=(Pet)p.get(i); //强制转换 System.out.println(e.getName()+"\t"+e.getType()); } } ArrayList
public static void main(String [] args){ //创建四个狗狗对象 Pet ouou=new Pet("欧欧","雪瑞拉"); Pet yaya=new Pet("亚亚","拉布拉多"); Pet meimei=new Pet("美美","雪瑞拉"); Pet feifei=new Pet("菲菲","拉布拉多"); //创建LinkedList集合 对象并把多个狗狗放入对象中 LinkedList l=new LinkedList(); l.add(ouou); l.add(yaya); l.addLast(meimei); //将meimei放到第一 l.addFirst(feifei); //将feifei放到最后 //查看集合中第一条狗狗的名称 Pet pFrist=(Pet)l.getFirst(); System.out.println("第一条狗狗的昵称是:"+pFrist.getName()); //查看最后一条狗狗的昵称 Pet pLast=(Pet)l.getLast(); System.out.println("最后一条狗狗的昵称是:"+pLast.getName()); //删除集合中第一条和最后一条狗狗 l.removeFirst(); l.removeLast(); //显示删除部分狗狗后集合中各条狗狗的信息 System.out.println("\n 删除部分狗狗后还有"+l.size()+"条狗狗!"); System.out.println("分别是:"); for(int i=0;i<l.size();i++){ Pet e=(Pet)l.get(i); //强制转换 System.out.println(e.getName()+"\t"+e.getType()); } } LinkedList
public static void main(String [] args){ //1.使用HashMap存储多组国家英文简称和中文全称的"键-值对" HashMap countries =new HashMap(); countries.put("CN", "中华人民共和国"); countries.put("RU", "俄罗斯联邦"); countries.put("FR", "法兰西共和国"); countries.put("US", "美利坚合众国"); //2.显示"CN"对应国家的中文全称 String countrie=(String) countries.get("CN"); //需强制转换 System.out.println("CN对应的国家是:"+countrie); //3.显示集合中元素个数 System.out.println("Map中共有:"+countries.size()+"国家"); //4.两次判断Map中是否存在"FR"健 System.out.println("Map中包含FR的Key吗?"+countries.containsKey("FR")); System.out.println("去除FR"); System.out.println("Map中包含FR的Key吗?"+countries.containsKey("FR")); //5.分别显示键集、值集、和键-值对集 System.out.println(countries.keySet()); System.out.println(countries.values()); System.out.println(countries); //6.清空HashMap并判断 countries.clear(); //清空 if(countries.isEmpty()){ System.out.println("已清空Map数据!"); }else{ System.out.println("数据没有清空。"); } } HashMap
public static void main(String [] args){ //创建多个宠物对象 Pet ouou=new Pet("欧欧","雪瑞拉"); Pet yaya=new Pet("亚亚","拉布拉多"); Pet meimei=new Pet("美美","雪瑞拉"); Pet feifei=new Pet("菲菲","拉布拉多"); //创建Map集合对象并把多个狗狗对象放入其中 Map m=new HashMap(); m.put(ouou.getName(), ouou); m.put(yaya.getName(), yaya); m.put(meimei.getName(),meimei); m.put(feifei.getName(),feifei); //通过迭代器依次输出集合中所有狗狗的信息 System.out.println("使用Iterator遍历,所以狗狗的昵称和品种是:"); Set keys=m.keySet(); //返回类型为Set,取出所有Key的集合 Iterator it=keys.iterator(); //获取Iterator对象 while(it.hasNext()){ String k=(String)it.next(); //取出Key Pet p=(Pet)m.get(k); //根据Key取出对应的值 System.out.println(k+"\t"+p.getType()); } } 迭代器
ArrayList和LinkedList的异同点?
相同点:
都实现了接口List,用来存储可重复,有序的对象
操作数据(添加、删除、获取数据、判断等)的方法都相同
不同点:
存储方式不同:ArrayList和数组相同,在内存中分配连续的空间;而LinkedList采用链表方式存储数据
效率侧重点不同:ArrayList在遍历和随机访问元素的效率较高;LinkedList在插入和删除数据效率较高
掌握HashMap的使用
位于包java.util,实现接口Map
使用前,都要创建对象
常用的方法:【P175页表7-3】
添加:put(Object key,Object value)
删除:remove(Object key)
获取值:get(Object key)
判断集合中是否存在某个键:containsKey(Object key)
集合中元素的个数:size()
键的集合: keySet()
值的集合:values();
循环输出集合中的元素?——不能使用for循环
while+Iterator迭代器一起使用
foreach
掌握Iterator的使用
循环输出HashMap集合中的key(多个)和value?
方式1:while+Iterator(参考代码示例5)
Set 变量名 = HashMap类的对象. keySet();//key的集合
Iterator 迭代器对象 = 变量名. iterator();
while(迭代器对象.hasNext()){//判断集合中是否有元素
//得到一个key
Object key = HashMap类的对象.next();
//得到该key对应的value
Object value = HashMap类的对象.get(key);
……………..编写其他代码
}
方式2:使用foreach循环(for循环的增强版)
语法:
for(数据类型变量名:数组名或集合名){
}
单独输出键的集合[keySet()方法]
for(Object key : HashMap对象.keySet()){
System.out.println(key);//每个键key的值
}
单独输出值的集合(values()方法)
for(Object v : HashMap对象.values()){
System.out.println(v);//每个键value的值
}
通过key,输出对应的value?
for(Object key:HashMap对象.keySet()){
Object value=HashMap对象.get(key);
……….编写其他代码
}
public static void main(String [] args){ //创建多个狗狗对象 Pet ouou=new Pet("欧欧","雪瑞拉"); Pet yaya=new Pet("亚亚","拉布拉多"); Pet meimei=new Pet("美美","雪瑞拉"); Pet feifei=new Pet("菲菲","拉布拉多"); //创建ArrayList集合对象并把多个狗狗对象放入其中 List <Pet> p=new ArrayList <Pet>(); //标记元素类型 p.add(ouou); p.add(yaya); p.add(meimei); p.add(2, feifei); //将feifei添加到指定位置 //显示第三个元素信息 Pet p3=p.get(2); //无需强制转换 System.out.println("第三个狗狗信息如下:"); System.out.println(p3.getName()+"\t"+p3.getType()); //使用foreach语句遍历Pet对象 System.out.println("\n所有狗狗信息如下:"); for(Pet e:p){ //无需强制转换 System.out.println(e.getName()+"\t"+e.getType()); } System.out.println( ); for(int i=0;i<p.size();i++){ Pet t=p.get(i); //无需强制转换 System.out.println(t.getName()+"\t"+t.getType()); } }