【问题标题】:Improving the performance of my methods提高我的方法的性能
【发布时间】:2018-11-06 14:11:02
【问题描述】:

晚上好,

我有一些非常庞大且不可读的代码,我正在尝试简化它们,你有什么好的做法可以推荐

public static String getPropertybyId(){
       Scanner reader = new Scanner(System.in);  // Reading from System.in
   System.out.println("Enter an id number to search properties: ");
   int n = reader.nextInt(); // Scans the next token of the input as an int.
  reader.close();
  System.out.println(id.get(n) +", "+ property_address.get(n) +", "+ first_name.get(n) +", "+ last_name.get(n) +", "+
  email.get(n) +", "+
  owner_address.get(n) +", "+
  price.get(n)+", "+
  date_sold.get(n));


  return id.get(n) +" ,"+ property_address.get(n) +" ,"+ first_name.get(n) +" ,"+ last_name.get(n) +" ,"+
  email.get(n) +" ,"+
  owner_address.get(n) +" ,"+
  price.get(n);
}


    public static void getTopProperties(){
  price.remove(0);
  int n = 0;
  while (n < price.size()){
    price.set(n,((price.get(n)).substring(1)));
    n = n + 1;
  }

     Collections.sort(price);
 Scanner reader = new Scanner(System.in);  // Reading from System.in
 System.out.println("Enter a number for the list size of top properties: ");
 int user = reader.nextInt(); // Scans the next token of the input as an int.
 shrinkTo(price, user);
 reader.close();
 System.out.println(price);

  }

  public static void shrinkTo(List list, int newSize) {
int size = list.size();
if (newSize >= size) return;
for (int i = newSize; i < size; i++) {
    list.remove(list.size() - 1);
}

对于 getPropertybyID,我将根据 ID 号返回属性的所有详细信息,例如所有者姓名和价格。 有没有办法将不同的数组哈希映射或链接在一起,所以我没有这么长的返回语句?

这是我的数组:

    private static List<String> id = new ArrayList<String>();
  private static List<String> property_address = new ArrayList<String>();
  private static List<String> first_name = new ArrayList<String>();
      private static List<String> last_name = new ArrayList<String>();
  private static List<String> email = new ArrayList<String>();
  private static List<String> owner_address = new ArrayList<String>();
  private static List<String> price = new ArrayList<String>();
  private static List<String> date_sold = new ArrayList<String>();

对于 getTopProperties,我想删除对另一个类的调用并嵌入该额外代码,但我不知道如何操作。

对不起,如果我的代码不是很好,我是初学者

【问题讨论】:

  • 您真的对性能或可读性感兴趣吗?
  • 两者都有,你可以帮助我
  • 谷歌一个锯齿状数组
  • 创建一个名为 Property 的类,其中包含所有必填字段,以及 getter 和 setter。给它一个toString 打印方法。并且只有一个List&lt;Property&gt;,而不是一大堆List&lt;String&gt;s。
  • 这些是列表,而不是数组。改进工作代码是 codereview.se 的业务,但对于初学者来说,请一致地缩进代码。

标签: java arrays performance hashmap scalability


【解决方案1】:

我会避免重复 String 构建练习,而是使用格式化来构建 String 一次。此外,将 Scanner 包装在 System.inclose 是一个坏主意(这是一个全局)。相反,将阅读器与方法分离;并将其传入。或者,更好的是,将关注点分开并传入n。喜欢,

public static String getPropertybyId(int n) {
    String fmt = "%s, %s, %s, %s, %s, %s, %s, %s";
    String msg = String.format(fmt, id.get(n), property_address.get(n), 
            first_name.get(n), last_name.get(n), email.get(n), 
            owner_address.get(n), price.get(n), date_sold.get(n));
    System.out.println(msg);
    return msg;
}

【讨论】:

    【解决方案2】:

    您可以将整个内容传递给单独的方法进行字符串转换并在返回之前将其返回

    像这样……

        private String getPropertyDetials(int index) {
                return id.get(index) +" ,"+ property_address.get(index) +" ,"+ first_name.get(index) +" ,"+ last_name.get(index) +" ,"+
      email.get(index) +" ,"+
      owner_address.get(index) +" ,"+
      price.get(index);
            }
    

    进一步提高可读性,考虑创建一个模型类并覆盖 ToString 方法来执行上述操作,像 FileNotFoundEx 一样,您需要研究 OOP 概念

    【讨论】:

      【解决方案3】:

      您需要使用 OOP。面向对象编程将允许您简化这整个类型的问题。您的代码将缩小并变得更简单/可读。

      阅读它here 并感到惊讶。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-12-19
        • 2011-06-27
        • 2019-03-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-04-27
        • 2014-11-20
        相关资源
        最近更新 更多