2016.03.13总结
十五章 集合框架
1. 集合的特点:元素类型可以不同,长度可变,空间大小不确定。
2. JCF(java collection framwork)中主要集合分类:List,Set,Map;List和Set是Collection接口的子接口,该接口与Map平行。
3. List接口:数据元素可重复,元素插入时按索引顺序排列。
常用实现类:ArrayList:适用于查找元素,添加删除元素时效率低。LinkedList:适用于添加删除元素,查找元素时效率低。
常用方法:get()获取元素,set()设置元素,remove()删除元素,add()依次在后面加入元素,size()集合大小。
4. Set接口: 数据元素不可重复,元素排列无序。
常用实现类:HashSet:速度快,不排序。TreeSet:速度慢,排序。LinkedHashSet:有序的集合,是对set的优化,插入元素时按顺序插入。
常用方法:remove()删除元素,add()加入元素,size()集合大小。
5. 泛型:由于元素被封装进集合后,具体类型被隐藏,要操作具体元素时必须进行强转,并且元素类型不一致容易造成混乱,极有可能会出现异常,所以在集合声明时加上泛型,将集合统一为一个类型的数据。如:List<String> ls = new ArrayList<String>(); “<String>”就是泛型表达式。
6. Map接口:是由key/value对组成的无序集合;key和value都可以是任意数据类型,但集合中不能有重复的key值,value值可有重复。
常用实现类:HashMap:速度快,不排序。TreeMap:速度慢,排序。LinkedHashMap:有序的,元素依次插入。
常用方法:put(k,v)插入元素;get(k)获取元素value;keySet()将map中所有key取出形成一个set;values()取出所有value返回一个集合;remove(k)删除元素。
7. Collections,Arrays工具类:Collections是用来操作集合的工具类,用的较多;Arrays是用来操作数组的工具类,用的较少。
Collections中的sort方法可以通过使用Comparator比较接口来重写compare()方法设定排列顺序;或者通过将需要被排序的类应用comparable接口,并重写compareTo()方法来设定排列顺序。(重写时,return-1为当前元素排在前,1为后,0为不动)
十五章 集合(2)
1. Iterator迭代器:用来对集合进行遍历的,效率比for each高。主要方法有hasNext()和next(),分别用于判断是否有下一个元素,及获取下一个元素。
2. Set和List通过.iterator()方法获取相应的迭代器,并返回一个Iterator。
3. Map集合没有直接的iterator()方法,必须通过.entrySet()获取一个包含K/V映射的Set集合,集合的返回类型为Entry(Map的内部接口),然后通过Set的iterator()方法获取迭代器来遍历该Entry集合,然后对每个Entry对象可使用.getKey()和getValue()来获取相应的key和value值。代码例子如下:
// Map
Map<String, Integer> map = new HashMap<String, Integer>();
map.put("a", 1);
map.put("b", 2);
map.put("c", 3);
map.put("d", 4);
//使用entrySet将map的键值对映射关系转换成Set集合
Set<Map.Entry<String, Integer>> set = map.entrySet();
//调用Set的iterator方法,得到其迭代器
Iterator<Map.Entry<String, Integer>> mapIter = set.iterator();
while(mapIter.hasNext()){
//next 得到的是Entry对象,而不是直接的键和值
Map.Entry<String, Integer> entry = mapIter.next();
String key = entry.getKey();
Integer val = entry.getValue();
System.out.println("key: " + key + "\t" + "value: " + val);
}
第十六章 GUI (01)
1. 单例:只能创建一个对象的类,不能调用其构造,通过方法生成一个全局静态对象。例如:public class Single{
private static Single instance;
private Single(){}
public synchronized Single getInstance(){
if(this.instance == null){
this.instance = new Single();
}
return this.instance;
}
}
2. GUI分为首层容器:JFrame,JWindow和JDialog用于装入其他容器和组件,组件都放在首层容器的内容面板内(Container)通过容器的静态方法getContentPane()获取。并由container的add(组件)方法将组件加入进去后才能在首层容器页面中显示出来。
3. GUI程序编写步骤:
a.建立容器:
通过自定义一个类继承JFrame等首层容器来建立一个新容器类,并在其中设置标题(setTitle()),大小(setSize()),渲染(setVisible()这步放在最后),以及添加组件等。
b.建立组件:
常用组件有:JLable(文本)、JTextField(输入框)、JPasswordField(密码输入框)、JTextArea(文本域)、JRadioButton(单选栏,一般配合ButtonGroup使用)、JCheckBox(复选栏)、JComboBox(下拉菜单,创建对象时传参用String[])、JButton(按钮)。通过setBorders()设置组件位置和大小,通过setFont(new Font())来设置字体样式大小等,还可以用setBorder(BorderFactory.XXX())来设置边框样式,其中通过调用工具类BorderFactory中的方法来设置,具体方法见JDK API。
c.将组建添加到容器:
获取容器:Container content = this(JFrame对象).getContentPane();并通过content.add(Component)来添加。
d.设置布局:
通过setBorders(),setFont(new Font()),setBorder(BorderFactory.XXX())等来设置。
e.设置事件。
ps:动态和静态的区分:是否有交互,有交互的成为动态。