杂记java
来源:互联网 发布:dnf端口辅助 编辑:程序博客网 时间:2024/06/15 09:35
1、输出Map集合的键值
HashMap<String, String> map = new HashMap(){ { put("", ""); put("", ""); } };
方法1:
// 先获取Map集合中键的集合 Set<String> keySet = map.keySet(); // 有了Set集合就可以获取迭代器 Iterator<String> it = keySet.iterator(); while (it.hasNext()) { String key = it.next(); String value = map.get(key); System.out.print("key:" + key + "value:" + value); }
方法2:
// 将Map集合中的映射关系取出,存到Set集合中 Set<Map.Entry<String, String>> entrySet = map.entrySet(); Iterator<Map.Entry<String, String>> it = entrySet.iterator(); while (it.hasNext()) { Map.Entry<String, String> me = it.next(); String key = me.getKey(); String value = me.getValue(); System.out.print("key:" + key + "value:" + value); }
方法二比方法一执行效率快。
2、多态
①假设你要设计一个通用框架,这个框架会涉及到数据库的操作,但是你不能限定用户用哪个数据库,这个时候你就可以用到多态。
你可以设计一个接口:DataBaseDao
然后,每个不同的数据库,你可以编写接口的实现类,比如:SQLServerDao, MySqlDao, DB2Dao等等
当用户使用你框架的时候,他就可以用多态,实现自己的数据库连接功能:
DaoBaseDao dao = new SQLServerDao(); //针对SQLServer的接口实现,这里dao就是多态
dao.connect();
②可以增强代码的健壮性,只管按照父类的设计进行操作,不管具体是什么样的子类,将来这个子类用着不舒服了,换一个就行,不影响原来的代码,这样代码维护起来就更加容易
举个例子吧
class Car{
void run(){
…
}
}
class BMW extends Car{}
class Benz extends Car{}
实现的时候
Car car = new BMW();
car.run();
将来你开着觉得难受,直接将new BMW()换成 new Benz()就可以了,完全不影响别的代码。
①多态的体现
父类的引用指向了自己的子类对象
父类的引用也可以接收自己的子类对象
②多态的前提
继承,实现,重写
③多态的好处
大大提高程序的扩展性
④多态的弊端
父类的引用可以访问父类中成员,对于只存在于子类中的方法和属性它就望尘莫及了
⑤
Car car = new BMW(); // 类型提升,向上转型
// 想要调用BMW特有方法,强制将父类的引用转成子类类型
BMW bmw = (BMW) car; //向下转型
⑥
多态自始至终都是子类做着变化
⑦在多态中成员函数的特点
在编译时期,参阅引用型变量所属的类中是否有调用的方法。
在运行时期,参阅对象所属的类中是否有调用的方法。
⑧在多态中静态成员函数的特点
无论编译还是运行,都参考左边
⑨在多态中成员变量的特点
无论编译还是运行,都参考左边
3、API和接口
interface是开发接口,别人通过这个接口实现你的功能函数来达到你要展示的功能。你提供的接口好比一个标准,别人必须要实现。
API一般是指功能函数,比如查询JAVA的API,就是已经实现了的功能,提供给用户就行了。
4、标示接口
标识接口是没有任何方法和属性的接口。标识接口不对实现它的类有任何语义上的要求,它仅仅表明实现它的类属于一个特定的类型。
例如java.io.Serializablejava就是这样一个接口,他只是告诉jvm,继承于这个接口的CLASS需要序列化处理。
5、ArrayList和LinkedList区别
1、ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。
2、对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针。
3、对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据。
6、ArrayList和Vector区别
1、Vector是线程安全的,ArrayList不是线程安全的。
2、ArrayList在底层数组不够用时在原来的基础上扩展0.5倍,Vector是扩展1倍。
Vector和ArrayList一样,都继承自List
都是数组来实现的
Vector 只要是关键性的操作,方法前面都加了synchronized关键字,来保证线程的安全性。
当执行synchronized修饰的方法前,系统会对该方法加一把锁,方法执行完成后释放锁,加锁和释放锁的这个过程,在系统中是有开销的,因此,在单线程的环境中,Vector效率要差很多。(多线程环境不允许用ArrayList,需要做处理)。
7、HashMap和HashTable区别
1、由于HashMap非线程安全,在只有一个线程访问的情况下,效率要高于HashTable
——HashMap可以通过下面的语句进行同步:
Collections.synchronizeMap(hashMap);
——直接使用JDK 5 之后的 ConcurrentHashMap,如果使用Java 5或以上的话,请使用ConcurrentHashMap。
2、HashMap允许将null作为一个entry的key或者value,而Hashtable不允许。
3、HashMap把Hashtable的contains方法去掉了,改成containsValue和containsKey。因为contains方法容易让人引起误解。
4、Hashtable和HashMap扩容的方法不一样,HashTable中hash数组默认大小11,扩容方式是 old*2+1。HashMap中hash数组的默认大小是16,而且一定是2的指数,增加为原来的2倍,没有加1。
- java杂记
- java杂记
- java杂记
- java杂记
- Java杂记
- java杂记
- java杂记
- Java杂记
- Java杂记
- java杂记
- Java 杂记
- Java杂记
- java 杂记
- java杂记
- java杂记
- java杂记
- java杂记
- [java]杂记
- jQuery 中lable radio select 的一些操作
- Date,DateTime,String等日期格式的相互转化
- 如何转载文章
- Java Spring搭配TestNG测试配置
- iOS In-App Purchase 内购之 验证订单是沙盒环境还是真实环境
- 杂记java
- 关于C语言的fprintf与fwrite使用区别
- 1153
- jenkins用户手册-9-管理jenkins
- 数据库事务隔离级别
- Python爬虫利器五之Selenium的用法
- Android launcher加载流程
- CentOS 7 开放防火墙80,3306等端口命令
- spring配置RabbitMQ的发送和接收demo