String:我们对字符串的各种修改,都是通过在内存中不停开辟新空间的方式进行的。这种方式非常影响程序运行的性能。
StringBuffer:直接修改(速度快,线程安全)。
集合架构 (java.util)
集合可以看作是一种容器,用来存储对象(集合只能存对象)。
集合框架从整体上可以分为两大接口:
Collection接口:所有实现类均存储的是单一对象。
-
List接口:
是Collection接口的子接口,存放的元素有序且允许重复。
常用实现类:ArrayList(重点) LinkedList Vector(知道即可)
public static void main(String[] args) { ArrayList al1=new ArrayList();//创建ArrayList集合对象 ArrayList al2=new ArrayList(); Stu stu1=new Stu("张三 ",12);//创建Stu对象 Stu stu2=new Stu("李四 ",13); Stu stu5=new Stu("大宝 ",12); Stu stu6=new Stu("二宝 ",12); al1.add(stu1);al1.add(stu2);//在集合中添加对象 al2.add(stu5);al2.add(stu6); al1.remove(stu1);//移出集合中对象 System.out.println(al1.size());//获取元素个数 System.out.println(al2.isEmpty());//判断集合是否为空 System.out.println(al1.contains(stu1));//判断集合是否包含stu1对象(或者判断集合是否包含其他集合中的所有对象) al1.addAll(al2);//将一各集合中所有元素添加到另一个集合中 al1.removeAll(al2);//移除al1和al2的交集 al1.retainAll(al2);//仅保留al1和al2的交集 al1.clear();//移除al1的所有元素 Stu[] sArray=(Stu[])al2.toArray();//把al2转换成Stu数组 System.out.println(al1.get(0));//索引从0开始,顺序为添加顺序 for(int i=0;i<al1.size();i++) {//遍历集合al1 System.out.println(al.get(i)); }
-
set接口:
Collection接口的子接口,存放的元素无序且不允许重复。
仍然使用Collection方法 ,没有get()方法(没有索引)。
常用的实现类: HashSet:散列存放,无序
TreeSet:有序存放,自然排序(升序,并非按照存入顺序)
public static void main(String[] args) { Stu stu1=new Stu("张三 ",12); Stu stu2=new Stu("李四 ",13); Stu stu3=new Stu("王五 ",12); HashSet<Stu> hs=new HashSet(); //泛型 hs.add(stu1);hs.add(stu2); hs.add(stu3);hs.add(stu3);//因为不允许重复,只会添加一个stu3对象 for(Stu s:hs) {//因为无序,遍历需要用for each循环 System.out.println(s.getName()); } } public static void main(String[] args) { TreeSet<String> ts=new TreeSet();//泛型 ts.add("d");ts.add("a");ts.add("e"); ts.add("c");ts.add("b");//int类型会自动装箱 for(String i:ts) { System.out.println(i); } }//输出结果是:abcde(升序)
-
Iterator接口(迭代器)(java.lang.Iterable):
主要用于遍历Colleciton接口的及其子类而设计
public static void main(String[] args) { ArrayList hs=new ArrayList(); hs.add("张三");hs.add("李四"); hs.add("王五");hs.add("赵六"); hs.add(666); Iterator it=hs.iterator();//求容器(集合就是一种容器)返回一个Iterator。 while(it.hasNext()) {//检查序列中是否还有元素。 System.out.println(it.next());//获得序列中的下一个元素。 } }
Map接口:所有实现类均存储的是key-value(键值对)形式的数据。
key可以为任意类型,实际开发建议使用String , value也可以是任意类型;
常用的实现类: :HashMap(重点,无序) HashTable (无序)TreeMap(自然)
public static void main(String[] args) { HashMap hm=new HashMap(); hm.put("1001", "张三");hm.put("1002", "李四");//往集合中添加数据 hm.put("1003", "王五");hm.put("1004", "王五"); System.out.println(hm.get("1001"));//根据key:1001来获取对应的value:张三 System.out.println(hm.containsKey("1001"));//判断集合中是否包含key:1001 System.out.println(hm.containsValue("张三"));//判断集合中是否包含Value:张三 System.out.println(hm.isEmpty());//判断集合是否为空 System.out.println(hm.values());//返回所有的value的集合 Set st=hm.keySet();//所有key的集合,返回类型为Set Iterator it=st.iterator();//Iterator接口(迭代器) while(it.hasNext()) { System.out.println(hm.get(it.next())); } //hm.putAll(hm2) 把一个Map集合hm2存入的Map集合hm中 hm.remove("1004");//据key在Map中删除指定的key-value组合 System.out.println(hm.size());//Map集合中key-value的长度 }